これを行うことの違いは何ですか?
public class SomeClass {
SomeObject obj = new SomeObject();
//rest of the code
}
この
public class SomeClass {
SomeObject obj;
public SomeClass(){
obj = new SomeObject();
}
//rest of the code
}
第12.5章Java言語仕様の新しいクラスインスタンスの作成によると、
新しく作成されたオブジェクトへの参照が結果として返される直前に、次の手順を使用して、示されたコンストラクターが処理され、新しいオブジェクトが初期化されます。
- コンストラクターの引数を、このコンストラクターの呼び出し用に新しく作成されたパラメーター変数に割り当てます。
- このコンストラクターが同じクラスの別のコンストラクターの明示的なコンストラクター呼び出し(これを使用)で始まる場合、引数を評価し、これらの同じ5つの手順を使用してそのコンストラクター呼び出しを再帰的に処理します。そのコンストラクターの呼び出しが突然完了すると、この手順は同じ理由で突然完了します。それ以外の場合は、手順5に進みます。
- このコンストラクタは、(これを使用して)同じクラス内の別のコンストラクタを明示的に呼び出すことから始まりません。このコンストラクターがObject以外のクラス用である場合、このコンストラクターは、スーパークラスコンストラクターの明示的または暗黙的な呼び出しから始まります(superを使用)。引数を評価し、同じ5つのステップを使用して、スーパークラスコンストラクターの呼び出しを再帰的に処理します。そのコンストラクターの呼び出しが突然完了すると、この手順は同じ理由で突然完了します。それ以外の場合は、ステップに進みます
- このクラスのインスタンス初期化子とインスタンス変数初期化子を実行し、インスタンス変数初期化子の値を、対応するインスタンス変数に、クラスのソースコードにテキストで表示される左から右の順序で割り当てます。これらのイニシャライザのいずれかを実行すると例外が発生した場合、それ以上のイニシャライザは処理されず、この手順は同じ例外で突然完了します。それ以外の場合は、手順5に進みます(フィールドの初期化式が、その型のデフォルトの初期化値と等しい値である定数式である場合、コンパイラーは誤ってコードを省略してフィールドを初期化します)。
- このコンストラクターの本体の残りを実行します。その実行が突然完了すると、この手順は同じ理由で突然完了します。それ以外の場合、この手順は正常に完了します。
したがって、違いは単なるステップ(ステップ4.またはステップ5.)ですが、結果は同じです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加