コード1日目:クラスの初期化

1292 ワード

クラスの初期化
クラスは最初のロード時にのみ初期化、クラス変数、クラスメソッドを初期化する必要があります.
クラスのコンパイルはクラスの初期化プロセスを決定します.
コンパイラによって生成されたclassファイルは、主にソースファイルに定義されたクラスに対して次のように変更されます.
1)静的メンバー変数の定義順にクラス内でメンバー変数を宣言します.
2)元のjavaクラスでメンバー変数の初期化順に初期化する.
Javaクラスとコンパイルされたclassの変換は次のとおりです.
public class a {
   public static String a = "a";
   public static int i ;
   static{
      i = 1;
      System.out.println("    i  ");
   }
   public static boolean b ;
   static{
      a = "ab";
      b = true;
      i = 2;
   }
   public static void main(String[] args) {
      System.out.println(a);
      System.out.println(i);
      System.out.println(b);
   }
}

classに移行後:
public class a {
   public static String a = "a";
   public static int i ;
   public static boolean b ;
   static{
      i = 1;
      System.out.println("    i  ");
      a = "ab";
      b = true;
      i = 2;
   }
   public static void main(String[] args) {
      System.out.println(a);
      System.out.println(i);
      System.out.println(b);
   }
}

初期化順序は変換後に対応するclassクラスメンバー変数の初期化順序に従って順次実行されるため、すべての静的メンバー変数は先に宣言され、その後に付与され、付与の順序もソースコードに従って静的メンバー変数を初期化する順序で行われる.注意:メンバー変数を定義し、直接初期化することは静的コードブロックで初期化することと等価である.ソースコードで定義された順序に基づいて行われます