e安教育
2016-12-13 10:43
首先看下這段測試**
public class classloader // 1.第二步,靜態變數和靜態**塊的載入順序由編寫先後決定
static int snum = 4;
// 2.第三步,靜態塊,然後執行靜態**塊,因為有輸出,故列印
static // 4.第五步,按照順序載入匿名**塊,**塊中有列印
system.out.println("靜態變數 =" + snum);
snum += 3;
system.out.println("類方法快執行");
system.out.println("靜態變數 =" + snum);
} // 5.第六步,按照順序載入變數
int mnum = 5;
// 6.第七步,按照順序列印
system.out.println("成員方法塊執行");
} // 7.第八步,最後載入建構函式,完成物件的建立
classloader() // 8.靜態方法,呼叫的時候才載入
static void run()
system.out.println("static function");
} // 8.內部類,呼叫的時候才載入
static class interior {
static {
system.out.println("interior");
看下輸出結果
輸出結果
輸出結果表明,程式的執行順序為:
如果類還沒有被載入:
1、先執行父類的靜態**塊和靜態變數初始化,並且靜態**塊和靜態變數的執行順序只跟**中出現的順序有關。
2、執行子類的靜態**塊和靜態變數初始化。
3、執行父類的例項變數初始化
4、執行父類的建構函式
5、執行子類的例項變數初始化
6、執行子類的建構函式
如果類已經被載入:
則靜態**塊和靜態變數就不用重複執行,再建立類物件時,只執行與例項相關的變數初始化和構造方法。
Java類成員初始化順序
首先看下這段測試 public class classloader 1.第二步,靜態變數和靜態 塊的載入順序由編寫先後決定 static int snum 4 2.第三步,靜態塊,然後執行靜態 塊,因為有輸出,故列印 static 4.第五步,按照順序載入匿名 塊,塊中有列印 5.第六步,按照順序載...
java類成員初始化順序
乙個類中,最首先被初始化的是靜態成員。只要乙個類建立物件或呼叫該類的靜態方法時靜態成員就都會被初始化,並且靜態資料在記憶體中只占用乙份儲存區域,無論建立多少個物件,靜態資料被所有物件共享。初始化靜態成員後再初始化非靜態成員。屬性 方法 構造方法和自由塊都是類的成員,在建立類物件時,類中各執行順序 b...
Java類成員的初始化順序
靜態成員 靜態變數 靜態初始化塊 變數 初始化塊 構造器 只要乙個類被使用 呼叫了類中的某個靜態方法或者是建立物件 這兩種情況表明該類被使用了。如果是有類的繼承關係,則優先執行父類中的成員,屬性及構造器,及初始化順序為 父類的靜態成員 子類的靜態成員 父類的變數 初始化塊 父類構造器 子類的變數 初...