ホームページ >Java >&#&チュートリアル >Javaクラスの初期化順序は何ですか

Javaクラスの初期化順序は何ですか

WBOY
WBOY転載
2023-04-19 09:04:061390ブラウズ

Java クラスの初期化シーケンス

これ以上言っても無駄です。以下は私が個人的にテストしたコードですが、一目瞭然です:

 1 package test1;
 2 
 3 public class Test {
 4     public static void main(String[] argc) {
 5         new Child();
 6         System.out.println("================================");
 7         new Child();
 8     }
 9 }
10 
11 class Child extends Parent{
12     private static String staticField = getStaticField();
13     static {
14         System.out.println("child静态方法块初始化");
15     }
16     private String field = getField();
17     {
18         System.out.println("child普通方法块初始化");
19     }
20 
21     public Child() {
22         System.out.println("child构造函数初始化");
23     }
24 
25     public static String getStaticField() {
26         System.out.println("child静态属性初始化");
27         return "staticField";
28     }
29 
30     public static String getField() {
31         System.out.println("child普通属性初始化");
32         return "field";
33     }
34 }
35 
36 class Parent {
37     private static String staticField = getStaticField();
38     static {
39         System.out.println("parent静态方法块初始化");
40     }
41     private String field = getField();
42     {
43         System.out.println("parent普通方法块初始化");
44     }
45 
46     public Parent() {
47         System.out.println("parent构造函数初始化");
48     }
49 
50     public static String getStaticField() {
51         System.out.println("parent静态属性初始化");
52         return "staticField";
53     }
54 
55     public static String getField() {
56         System.out.println("parent普通属性初始化");
57         return "field";
58     }
59 }

印刷結果:

 1 parent静态属性初始化
 2 parent静态方法块初始化
 3 child静态属性初始化
 4 child静态方法块初始化
 5 parent普通属性初始化
 6 parent普通方法块初始化
 7 parent构造函数初始化
 8 child普通属性初始化
 9 child普通方法块初始化
10 child构造函数初始化
11 ================================
12 parent普通属性初始化
13 parent普通方法块初始化
14 parent构造函数初始化
15 child普通属性初始化
16 child普通方法块初始化
17 child构造函数初始化

静的属性と静的初期化ブロックの宣言順序を置き換えると、静的属性と静的初期化ブロックの初期化順序は宣言順序と関係があり、同様に通常属性と通常初期化ブロックの初期化順序も宣言順序と関係があることがわかります。宣言の順番。

要約:

  1. クラスが初期化の条件を満たした場合 (将来のブログで概要を説明します)、親クラスが最初に初期化され (最上位の親クラス Object から下に向かって初期化されます)、次にサブクラスが初期化されます。

  2. このクラスを初期化するとき、静的プロパティと静的初期化ブロックが最初に初期化され (宣言順序に関連して)、最上位の親クラス Object から下位に初期化されます。 new を使用してオブジェクトを作成する場合、最初に通常のプロパティと通常の初期化ブロック (宣言順序に関連する) を初期化し、次にコンストラクター メソッドを呼び出して、これも最上位の親クラス Object から下位に実行します。

    ## 静的プロパティと静的初期化ブロックは 1 回だけ初期化されます。クラスが初期化された後、再度 new を使用してオブジェクトを作成しても、3 番目の手順が繰り返されるだけです。
  3. 次は Java プログラミングのアイデアからの引用です:
  4. クラス内では、変数定義の順序によって初期化の順序が決まります。変数定義がメソッド定義間に分散している場合でも、メソッド (コンストラクターを含む) が呼び出される前に初期化されます。

以上がJavaクラスの初期化順序は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。