this() で別のコンストラクタを呼ぶ
出力はどれか。
public class Main {
public static void main(String[] args) {
new P();
}
}
class P {
P() {
this("x");
System.out.print("A");
}
P(String s) {
System.out.print("B" + s);
}
}
- A
BxA - B
ABx - C
A - D コンパイルエラーになる
正解と解説を見る
正解: A
- A:
this("x")で先に Bx が出力され、戻ってきてから A が出力されます。 - B: this(...) の呼び出し先が先に実行されます。
- C: this("x") で呼んだコンストラクタも実行されるので、Bx も出力されます。
- D: this(...) をコンストラクタの最初の文に書くのは正しい書き方です。
ポイント
this(...)は同じクラスの別のコンストラクタを呼びます。呼んだ先が終わってから続きが実行されます。this(...)はコンストラクタの最初の文でなければなりません。