JAvaユーザークラスにおけるコンテンツのロードプロセス


package com.test.jse;
/**
 *            
 * @author cat
 */
public class ClassLoadOrder {
	static int a = 1; //      
	
	//    
	private static void doTell(){
		System.out.println("       !");
	}
	
	static{
		System.out.println("        "+a);
	}
	
	//    
	ClassLoadOrder(){
		System.out.println("       "+"a="+a+"b="+b );
	}
	
	int b = 2; //       
	
	//     
	public void doSay(){
		System.out.println("       "+a+"\t"+b);
	}
	
	{
		System.out.println("     "+"a="+a+"b="+b);
	}
	
	public static void main(String[] args) {
		ClassLoadOrder c = new ClassLoadOrder();
		c.doSay();
		c.doTell();
	}
}
----    ------

        1
     a=1b=2
       a=1b=2
       1	2
       !

結果解釈:第1行、静的符号ブロック1は、静的定数が静的符号ブロックよりも優先されることを示す.
              2行目、一般コードブロックa=1 b=2は、一般定数ロードが一般コードブロックよりも優先されることを示す.
              3行目、構造方法の実行a=1 b=2は、静的定数と一般定数が構造関数よりも優先されることを示す.
              4行目は、メソッド呼び出しの比較をしない.
静的定数>静的コードブロック>コンストラクション関数の順序がわかります.
                              一般定数>一般コードブロック>コンストラクション関数.
テストコードを次のように変更します.
package com.test.jse;

public class StaticCode {
	
	static int a = 2;
	
	private static void doTestTell(){
		System.out.println("    "+a);
	}
	
	static{
		System.out.println("     "+a);
	}

	public static void main(String[] args) {

	}

}

-----    -----
     2

結果説明:印刷結果説明:クラスStaticCodeはロード中に静的定数と静的コードブロックを実行したが、静的メソッドは実行しなかった.
以前のテスト結果に連絡すると、次の結論が得られます.
                         静的定数>静的符号ブロック>一般定数>一般符号ブロック>コンストラクション関数
クラス内の静的メソッドと一般的なメソッドは、呼び出し時にのみ実行されます.