2

これの間に違いはありますか:

public class A {
    B b;
    A() {
        b=new B();
    }
}

この :

public class A {
    B b=new B();
    A() {
    }
}

ある場合、それは何ですか?そしてより良い練習は何ですか?ない場合、何が推奨されますか?

4

3 に答える 3

2

私の知る限り、コンストラクターが 1 つしかない限り、違いはありません。複数のコンストラクターがある場合は、すべてのコンストラクターで割り当てられていることを確認する必要があります。そのため、2 番目の方法をお勧めします。

于 2012-04-17T15:33:06.013 に答える
1

インスタンス変数が初期化された後にコンストラクターが実行されるため、違いがあります。小さな例では問題になりませんが、より複雑なコードでは問題になる可能性があります。(コードの順序は重要ではないことに注意してください。初期化がコンストラクター内にある場合は、2 番目に実行されます。)

2 番目のアプローチの方が便利なので、私はそれから始める傾向があります。ただし、最初のアプローチは (制御の反転とポリモーフィズムの場合) より便利な場合があるため、「実際の」コードでよく使用されます。

class B {
    B() {
        System.out.println("B constructor");
    }
}

public class A {
    B b=new B();

    A() {
        System.out.println("A constructor");
    }
    public static void main(String[] args) {
        new A();
    }

}

出力:

B constructor
A constructor

....

class B {
    B() {
        System.out.println("B constructor");
    }
}

public class A {
    B b;
    A() {
        System.out.println("A constructor");
        b=new B();
    }

    public static void main(String[] args) {
        new A();
    }
}

出力:

A constructor
B constructor
于 2012-04-17T15:38:34.603 に答える
0

それらの間の大きな違い。

最初のオプション クラス B では、パラメーターのないコンストラクターが呼び出されたときにのみインスタンス化されます。パラメーター化されたコンストラクターを配置して呼び出すと、クラス B はインスタンス化されません。

ただし、2 番目のオプションの場合、コンストラクターの呼び出しに関係なく、クラス B は常にインスタンス化されます。

于 2012-04-17T15:38:17.190 に答える