JAvaユーザークラスにおけるコンテンツのロードプロセス
2005 ワード
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はロード中に静的定数と静的コードブロックを実行したが、静的メソッドは実行しなかった.
以前のテスト結果に連絡すると、次の結論が得られます.
静的定数>静的符号ブロック>一般定数>一般符号ブロック>コンストラクション関数
クラス内の静的メソッドと一般的なメソッドは、呼び出し時にのみ実行されます.