静的コードブロックの1:プロジェクトが開始したとき、いくつかのコードは、クラスがロードされるとき、静的コードブロックが実行され、一度だけ実行され、静的ブロックはクラス属性を実行するために使用される(このようなコードの実行がアクティブであり、実行されなければなりません初期化)
2つの静的メソッド:プロジェクトが始まったときに、オブジェクトを作成しなくても、このようなコードは、受動的(クラスのロード時間の静的メソッドは、クラス名がロードされている直接呼び出すことができます)が実行され、初期化する必要があります。
違いは:コードの静的ブロックが自動的に実行され、
それらが実行された時に静的メソッドのみが呼び出されます。
コードの静的ブロック、ローディングクラスが実行のためにロードされ、一度だけ実行される仮想マシン。
オブジェクトを作成するときに実行されるコードの非静的ブロック(つまり、新しいオブジェクトときである)、オブジェクトは、作成するたびに実行されます
この方法は、静的クラスの実行を作成せず、静的または非静的ブロック符号のブロックをもたらしません。
この方法は、静的クラスの実行を作成しないと、例えば、静的コード・ブロックまたはコードの静的ブロックをもたらしません。
パッケージcom.practice.dynamicproxy。 クラス親{ 静的文字列名=「こんにちは」。 { のSystem.out.println( "親ブロック" )。 } 静的{ するSystem.out.println(「親静的ブロック」)。 } パブリック親(){ System.out.printlnは( "親コンストラクタ" )。 } } クラス子供延び親{ 静的 childName =「hello」を文字列。 { System.out.printlnは( "子ブロック"); } 静的{ するSystem.out.println(「子静的ブロック」)。 } パブリック子供(){ System.out.printlnは( "子コンストラクタ" )。 } } パブリック クラスStaticIniBlockOrderTest { 公共 静的 ボイドTEST1(){ System.out.printlnは( "静的メソッド" )。 } パブリック 静的 ボイドメイン(文字列[]引数){ // 新しい子()。// 语句(*) // 新しい子(); StaticIniBlockOrderTest.test1(); } }
次のような結果の実装は以下のとおりです。
静的メソッド
次のようにサンプルコードの残りの部分は次のとおりです。
パッケージcom.practice.dynamicproxy。 クラス親{ 静的文字列名=「こんにちは」。 { のSystem.out.println( "親ブロック" )。 } 静的{ するSystem.out.println(「親静的ブロック」)。 } パブリック親(){ System.out.printlnは( "親コンストラクタ" )。 } } クラス子供延び親{ 静的 childName =「hello」を文字列。 { System.out.printlnは( "子ブロック"); } 静的{ するSystem.out.println(「子静的ブロック」)。 } パブリック子供(){ System.out.printlnは( "子コンストラクタ" )。 } } パブリック クラスStaticIniBlockOrderTest { 公共 静的 ボイドTEST1(){ System.out.printlnは( "静的メソッド" )。 } パブリック 静的 ボイドメイン(文字列[]引数){ 新しい子供()。// 语句(*) 新しい子(); // StaticIniBlockOrderTest.test1(); } }
次のような結果の実装は以下のとおりです。
親静的ブロック
子静的ブロック
の親ブロック
親コンストラクタ
子のブロックの
子コンストラクタ
親ブロック
親コンストラクタ
子のブロックの
子のコンストラクタ
説明:コードの静的ブロックが1回実行され、コードの二回非静的ブロック、最初のコードブロックと非静的行うコンストラクタ親クラス、クラスコードブロックと非静的コンストラクタのその後実装