2016-09-13 1 views
-3
private int a = 2; 
public A(int x) { 
    a = x*2; 
} 
public A() { 
    this(5); 
} 
public int test() { 
    return a; 
} 
public static void main(String argv[]) { 
    A a1 = new A(); 
    System.out.println(a1.test()); 
}  

私はJavaを初めて使いました。これは私の模擬テストの質問です。出力は10で、私は5であるべきだと思った。助けてください!非常に感謝します!オーバーロードコンストラクタ

+2

くださいコードを適切にフォーマットしてください – Jens

+1

コードをより明示的にフォーマットしてください。あなたは十分な垂直スペースを持っています - それを使用してください!さて、あなたはなぜ答えが5であるべきだと思いますか?引数が5のA(int)コンストラクタを呼び出す 'new A()'を呼び出すと、そのコンストラクタはその値を10倍にします。 –

+2

デバッガを使用すると、何が起こっているかを確認 – Jens

答えて

4

メインはA()コンストラクタを呼び出し、A(int x)を呼び出します(ステートメントthis(5);)。したがって、aには10(a = x*2;,xは5)が割り当てられます。何が起こるか

0

まあです:

public A(){ 
    this(5); 
} 

これは今公共A(int型x)を呼び出します。それが行くよう

A a1 = new A(); 

が、これは公共A()コンストラクタを使用していますコンストラクタ xは5と等しいので、これは呼び出されるので、

public A(5) { 
    a = 5 * 2; 
} 

したがって:

a = 5 * 2; 
a = 10; 

だからしたがって、この10

あろう:

System.out.println(a1.test()); 

A1の整数を返し、A1オブジェクトの試験方法を呼び出します我々が知ったのは10である。

したがって、本質的にこれが起こる:

System.out.println(10); 

ので、出力はこれは、あなたが(すべてのIDEを持っている)デバッグモードを使用する場合は、表示される内容本質的である10

です。

関連する問題