1. クラスの初期化
クラスの初期化の場合: クラスの初期化は通常 1 回だけ初期化され、主に静的メンバー変数が初期化されます。
クラスのコンパイルによって、クラスの初期化プロセスが決まります。
コンパイラによって生成されたクラス ファイルは、ソース ファイルで定義されているクラスに主に次の変更を加えます。
1) まずクラス内で静的メンバ変数の定義順にメンバ変数を宣言します。
2) 元の Java クラスのメンバ変数の初期化順序に従って初期化します。
Java クラスとコンパイルされたクラス間の対応する変換は次のとおりです。
ソースファイル:
次のようにコードをコピーします。
パブリッククラス 人{
public static String name="張三";
public static int age;
静的{
年齢=20;
System.out.println("初期化経過時間");
}
パブリック静的文字列アドレス。
静的{
address="北京";
年齢=34;
}
public static void main(String[] args) {
System.out.println(名前);
System.out.println(age);
System.out.println(アドレス);
}
}
Java ソース コードがクラス ファイルに変換されると、次のようなコードに変換されます。
次のようにコードをコピーします。
パブリック クラス 人{
public static 文字列名。
public static int age;
パブリック静的文字列アドレス。
静的{
名前 = "張三";
年齢=20;
System.out.println("初期化経過時間");
address="北京";
年齢=34;
}
public static void main(String[] args) {
System.out.println(名前);
System.out.println(age);
System.out.println(アドレス);
}
}
初期化シーケンスは、変換後の対応するクラス メンバー変数の初期化シーケンスに従って順次実行されるため、すべての静的メンバー変数は最初に宣言されてから割り当てられ、割り当ての順序も静的メンバー変数の順序に基づきます。注: メンバー変数を定義して直接初期化することは、ソース コードで定義されている順序において、静的コード ブロックで初期化することと同じです。
2. オブジェクトの生成
オブジェクト生成の初期化プロセスはクラスの初期化プロセスと似ていますが、ソース コードは次のとおりです。
次のようにコードをコピーします。
パブリック クラス 人{
{
name="李思";
年齢=56;
System.out.println("初期化経過時間");
アドレス = "上海";
}
public String name="張三";
public int age=29;
public String address = "北京";
パブリックパーソン(){
name = "趙劉";
年齢=23;
アドレス = "上海";
}
}
コンパイラがそれをクラス ファイルに変換すると、次のようなコードに変換されます。
次のようにコードをコピーします。
パブリック クラス 人{
パブリック文字列名。
公的整数年齢。
パブリック文字列アドレス。
パブリックパーソン(){
name="李思";
年齢=56;
System.out.println("初期化経過時間");
アドレス = "上海";
名前 = "張三";
年齢=29;
address="北京";
name = "趙劉";
年齢=23;
アドレス = "上海";
}
}
クラス内のメンバー変数の初期化とコード ブロック内のコードはすべてコンストラクターに移動され、メンバー変数は Java ソース ファイルの初期化順序に従って順次初期化されますが、コード ブロック内のコードはコンストラクターに移動されていることがわかります。元のコンストラクター コンストラクターの最後の実行に移動されます。これまでクラスの初期化処理を深く理解したことがなく、初期化の手順を本に従って覚えただけだったのですが、時間が経つと忘れてしまったので、今回.ようやく理解できました。モデルに従って初期化メカニズムを説明する方がよいでしょう。それを理解していれば、もう覚える必要はありません。