オブジェクトを作成している間に 'コンストラクタ'がメモリを割り当ててインスタンス変数を初期化する場合、なぜObject o = new Object();
と言うべきですか? どうしてですか?Object o = Object();
?Javaの「新しい」演算子の実際のポイントは何ですか?
実際に新しいオペレータは何をしていますか?
オブジェクトを作成している間に 'コンストラクタ'がメモリを割り当ててインスタンス変数を初期化する場合、なぜObject o = new Object();
と言うべきですか? どうしてですか?Object o = Object();
?Javaの「新しい」演算子の実際のポイントは何ですか?
実際に新しいオペレータは何をしていますか?
コンストラクタは、既存のオブジェクトのみを初期化します。コンストラクタとメソッド呼び出しの違いを示す方法は、new
キーワードです。例えばクラスObject
にObject
というメソッドを持たせることができますが、何も作成されない可能性があります。あなたがサブクラスを持っているとき、これはさらに混乱します。
new
キーワードのポイントは、新しいオブジェクトの作成時に明確にすることです。
私はあなたが示唆しているように新しいオブジェクトを返すファクトリメソッドを持つことができますが、それを明示的にすると、実際に何が行われているかがより明確になると考えられます。
これは、名前の衝突を回避するように機能します。
レッツあなたが方法C、D、およびEを持つクラスAを持っていると言うが、あなたもそこwasn場合は、Aの
のインスタンスを作成したいDという名前の別のクラスを、持っています "新しいもののようなものがあれば、メソッドを呼び出すか新しいオブジェクトを作成するかどうかは、コンパイラには全くわかりません。
つまり、 'new'はメモリを割り当て、コンストラクタはそれを設定します。 – Pshemo
'x = Foo()'はメソッド呼び出しです。 'x = new Foo()'はコンストラクタ呼び出しです。 'new'は実際にどのようにコードが理解されるかに影響します。 – khelwood
http://stackoverflow.com/q/7019754/982149 – Fildor