JAVAにおける構造方法、インスタンス初期化、静的初期化の実行順序について
7129 ワード
Java筆記試験では、構造方法、インスタンス初期化、静的初期化の実行順序は、常に考察されている知識点である。
次のような問題です。
下のコードを実行して出力した結果は…
考慮したいのは、javaにおける構造方法、インスタンス初期化、静的初期化の実行順序である。
まず単一のクラスを持って、実行の順序は? 静的初期化ブロック->初期化ブロック->コンストラクタ
私達は知っています。子類が父類を継承する時、執行順序は父類を先に実行して、サブクラスを実行します。上記の手順により、次のような実行手順が得られます。親タイプ静的初期化ブロック サブクラス静的初期化ブロック 親タイプ初期化ブロック 父類コンストラクタ サブクラス初期化ブロック サブビルダー 私たちは二回Bを実用化する時:
staticで修飾された語句や変数の特徴は、1.クラスのローディングに伴い、2.オブジェクトの存在より優先する3.すべてのオブジェクトの共有4.クラス名で呼び出すことができます。すなわち、クラスの方法です。
次のような問題です。
下のコードを実行して出力した結果は…
1 class A {
2 public A() {
3 System.out.println("class A");
4 }
5 { System.out.println("I'm A class"); }
6 static { System.out.println("class A static"); }
7 }
8 public class B extends A {
9 public B() {
10 System.out.println("class B");
11 }
12 { System.out.println("I'm B class"); }
13 static { System.out.println("class B static"); }
14
15 public static void main(String[] args) {
16 new B();
17 }
18 }
実行順がわかれば、この問題の答えは分かります。1 class A static
2 class B static
3 I'm A class
4 class A
5 I'm B class
6 class B
この順番は何のためですか?考慮したいのは、javaにおける構造方法、インスタンス初期化、静的初期化の実行順序である。
まず単一のクラスを持って、実行の順序は? 静的初期化ブロック->初期化ブロック->コンストラクタ
私達は知っています。子類が父類を継承する時、執行順序は父類を先に実行して、サブクラスを実行します。上記の手順により、次のような実行手順が得られます。
1 class A {
2 public A() {
3 System.out.println("class A");
4 }
5 { System.out.println("I'm A class"); }
6 static { System.out.println("class A static"); }
7 }
8 public class B extends A {
9 public B() {
10 System.out.println("class B");
11 }
12 { System.out.println("I'm B class"); }
13 static { System.out.println("class B static"); }
14
15 public static void main(String[] args) {
16 new B();
17 new B();
18 }
19 }
下記の出力が得られます。 1 class A static
2 class B static
3 I'm A class
4 class A
5 I'm B class
6 class B
7 I'm A class
8 class A
9 I'm B class
10 class B
静的な初期化ブロックはクラスの最初のローディング時にのみ実行されるので、上記のような動作結果が得られます。静的なコードブロックとコンストラクタではなく、new毎に一回実行されます。staticで修飾された語句や変数の特徴は、1.クラスのローディングに伴い、2.オブジェクトの存在より優先する3.すべてのオブジェクトの共有4.クラス名で呼び出すことができます。すなわち、クラスの方法です。