コンストラクタの多重定義overload

同一クラス内でのメソッドのoverload(オーバロード、オーバーロード)についてはoverload - rderaログで勉強したが、コンストラクタの多重定義もできます。

//コンストラクタ
public Data()                                 { set(None,0,0); }
public Data(String name)                      { set(name,0,0); }
public Data(String name,int height)           { set(name,height,0); }
public Data(String name,int height,int weight){ set(name,height,weight); }
public Data(Data d)                           { set(d.name,d.height,d.weight); }

//メソッド
public void set(String name,int height,int weight) {
  this.name   = name;
  this.height = height;
  this.weight = weight;
}

コンストラクタでは、メソッドsetを使って値を設定しています。
しかし、以下のようにしてフィールドで一度初期化します。そして、コンストラクタ内で他のコンストラクタを呼び出し値を設定することもできます。こっちの方が効率が良いんでしょうか。

//フィールド
private String name = "None";
private int height  = 0;
private int weight  = 0;

public Data()                                 { }
public Data(String name)                      { this.name = name; }
public Data(String name,int height)           { this(name); this.height = height; }
public Data(String name,int height,int weight){ this(name,height); this.weight = weight }
public Data(Data d)                           { this(d.name,d.height,d.weight); }

クラス内の他のコンストラクタの呼び出しにはthisを使っています。
ちなみにthis(...)の呼び出しが許されるのは、コンストラクタの先頭に限定されます。
つまり、

public Data(String name,int height) { this.height = height; this(name); }

のような呼び出しはダメです。