これの間に違いはありますか:
public class A {
B b;
A() {
b=new B();
}
}
この :
public class A {
B b=new B();
A() {
}
}
ある場合、それは何ですか?そしてより良い練習は何ですか?ない場合、何が推奨されますか?
これの間に違いはありますか:
public class A {
B b;
A() {
b=new B();
}
}
この :
public class A {
B b=new B();
A() {
}
}
ある場合、それは何ですか?そしてより良い練習は何ですか?ない場合、何が推奨されますか?
私の知る限り、コンストラクターが 1 つしかない限り、違いはありません。複数のコンストラクターがある場合は、すべてのコンストラクターで割り当てられていることを確認する必要があります。そのため、2 番目の方法をお勧めします。
インスタンス変数が初期化された後にコンストラクターが実行されるため、違いがあります。小さな例では問題になりませんが、より複雑なコードでは問題になる可能性があります。(コードの順序は重要ではないことに注意してください。初期化がコンストラクター内にある場合は、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
それらの間の大きな違い。
最初のオプション クラス B では、パラメーターのないコンストラクターが呼び出されたときにのみインスタンス化されます。パラメーター化されたコンストラクターを配置して呼び出すと、クラス B はインスタンス化されません。
ただし、2 番目のオプションの場合、コンストラクターの呼び出しに関係なく、クラス B は常にインスタンス化されます。