今日は「Javaプログラミングの思考 (第4版中国語版)」を読んで、クラス内のメンバーの初期化に関する知識ポイントを復習しました。印象を深め、他の人に参考にしてもらうために、本の例を参考に次のコードを取得するように修正します:
ファイル名: HelloWorld.java
パッケージ名: main
package main; class Bowl { Bowl(int marker){ System.out.println("Bowl("+marker+")"); } void f1(int marker){ System.out.println("f1("+marker+")"); } } class Table{ static Bowl bowl1 = new Bowl(1); public Table() { System.out.println("Table()"); bowl2.f1(1); } void f2 (int marker){ System.out.println("f2("+marker+")"); } static Bowl bowl2 = new Bowl(2); } class Cupboard{ { System.out.println("Cupboard类普通代码块执行"); } Bowl bowl3 = new Bowl(3); // 注意,此处不是静态成员 static Bowl bowl4 = new Bowl(4); static{ System.out.println("Cupboard类静态代码块执行"); } public Cupboard() { // TODO Auto-generated constructor stub System.out.println("Cupboard()"); bowl4.f1(2); } void f3(int marker){ System.out.println("f3("+marker+")"); } static Bowl bowl5 = new Bowl(5); } public class HelloWorld { public static void main(String args[]){ System.out.println("Creating new Cupboard() in main"); new Cupboard(); table.f2(1); cupboard.f3(1); } static Table table = new Table(); static Cupboard cupboard = new Cupboard(); }
分析してみましょうプログラムの動作。
1. まず、Java 仮想マシンが main メソッドを実行したい場合は、まず HelloWorld クラスをロードする必要があります
2 クラス HelloWorld には静的データ (静的メンバーのみ) が含まれていることがわかり、静的メンバーを初期化します
まずは
【1】 static Table table = new Table(); そこでTableクラスをロードする必要があります。クラスに静的メンバーが含まれていることがわかり、定義された順序に従って初期化操作が実行されます
【2】static Bowl Bowl1 = new Bowl(1); 出力: Bowl(1)
【3】static Bowl Bowl2 = new Bowl(2); 出力: Bowl(2)
【4】コンストラクターTable()、出力: Table() と f1(1)
2番目
【1】 static Cupboard cupboard = new Cupboard(); Cupboard クラスをロードする必要があります。このクラスには静的データ (静的メンバーと静的コード ブロックを含む) が含まれていることがわかり、初期化操作は 2 つの
[2] static Bowl Bowl4 = new Bowl(4); によって定義された順序に従って実行されます。 (4)
[3]
static{
System.out.println("食器棚クラスの静的コードブロックの実行");
}
出力:食器棚クラスの静的コードブロックの実行
【4】 static Bowl Bowl5 = new Bowl(5) ); 出力: Bowl(5 )
静的メンバーが初期化された後、new を通じて オブジェクト が生成されます。クラスにはメンバ定義の代入と通常のコードブロックが含まれていることが分かり、定義された順番に従って初期化操作が行われる
【1】
{
System.out.println("Cupboardクラスの通常のコードブロックの実行");
}
出力:食器棚クラスの通常のコードブロック実行
【2】ボウルボウル3 = new Bowl(3);出力:ボウル(3)
【3】コンストラクターCupboard()、出力:Cupboard()とf1( 2)
3. mainメソッドを入力します
【1】System.out.println("Creating new Cupboard() in main"); 出力: mainに新しいCupboard()を作成します
【2】new Cupboard(); Cupboard クラスにはメンバー定義代入と通常のコード ブロックが含まれていることがわかり、初期化操作はこの 2 つによって定義された順序に従って実行されます。出力: Cupboard クラスの通常のコード ブロックの実行と Bowl(3)
[3] コンストラクター Cupboard()。 , 出力:Cupboard() と f1(2)
【4】 table.f2(1); 出力:f2(1)
【5】 cupboard.f3(1); まとめると、プログラムの出力結果は次のとおりです:
Bowl(1 )
Bowl(2)
Table()
f1(1)
Bowl(4)
Cupboardクラスの静的コードブロックの実行
Bowl(5)
Cupboardクラスの通常のコードブロックの実行
Bowl(3)
Cupboard()
f1 (2)
mainで新しいCupboard()を作成
Cupboardクラスの通常のコードブロック実行
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3 (1)
コンストラクターメソッドの初期化です。
以上がJava クラスの静的メンバー、静的コード ブロック、通常のメンバー、通常のコード ブロック、およびコンストラクター メソッドの初期化と実行の順序の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。