コード1日目:クラスの初期化
1292 ワード
クラスの初期化
クラスは最初のロード時にのみ初期化、クラス変数、クラスメソッドを初期化する必要があります.
クラスのコンパイルはクラスの初期化プロセスを決定します.
コンパイラによって生成されたclassファイルは、主にソースファイルに定義されたクラスに対して次のように変更されます.
1)静的メンバー変数の定義順にクラス内でメンバー変数を宣言します.
2)元のjavaクラスでメンバー変数の初期化順に初期化する.
Javaクラスとコンパイルされたclassの変換は次のとおりです.
classに移行後:
初期化順序は変換後に対応するclassクラスメンバー変数の初期化順序に従って順次実行されるため、すべての静的メンバー変数は先に宣言され、その後に付与され、付与の順序もソースコードに従って静的メンバー変数を初期化する順序で行われる.注意:メンバー変数を定義し、直接初期化することは静的コードブロックで初期化することと等価である.ソースコードで定義された順序に基づいて行われます
クラスは最初のロード時にのみ初期化、クラス変数、クラスメソッドを初期化する必要があります.
クラスのコンパイルはクラスの初期化プロセスを決定します.
コンパイラによって生成された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クラスメンバー変数の初期化順序に従って順次実行されるため、すべての静的メンバー変数は先に宣言され、その後に付与され、付与の順序もソースコードに従って静的メンバー変数を初期化する順序で行われる.注意:メンバー変数を定義し、直接初期化することは静的コードブロックで初期化することと等価である.ソースコードで定義された順序に基づいて行われます