關於類載入和初始化時內部元素載入順序

2021-08-05 23:46:02 字數 711 閱讀 6348

1.當乙個類載入時:【沒有除了object以外的其它父類時候】

首先是靜態內容【靜態成員變數--->靜態**塊---->靜態方法】---->構造**塊--->建構函式【幾乎和構造**塊一起,只是要在建構函式內容之前執行】--->成員變數---->普通方法【區域性變數---->區域性**塊】

2.當乙個類載入時:【除了object以外還有其它的父類時候】

當初始化子類物件時,首先要載入父類物件,載入父類物件時候也是先載入類成員【被static修飾的】,有靜態的先載入靜態的,當父類的靜態載入完事後,載入子類靜態的【這時候要注意是父類的類靜態載入完之後,立刻載入子類的靜態】,之後是父類的構造**塊和建構函式,緊接著是子類的構造**塊和構造方法,之後是子類繼承的父類的方法,成員變數等。

如果存在多重父類,遞迴載入,規則如上:

package test;

public class test

}class helloa

//構造**塊

//靜態**塊

static

}class hellob extends helloa

static

}執行結果:

i'm statica 

i'm staticb 

i'm helloa class

i'm helloa 的建構函式

i'm hellob class

i'm hellob 的建構函式

類的載入和初始化順序

靜態變數,靜態塊 按文字順序載入 非靜態變數,非靜態塊 按文字順序載入 構造器 靜態 塊不能在 靜態 變數宣告之前應用它。對於繼承關係中的類的初始化 父類靜態變數,父類靜態塊 子類靜態變數,子類靜態塊 父類非靜態變數,父類非靜態塊 父類構造器 子類非靜態變數,子類非靜態塊 子類構造器 如果在靜態塊中...

類載入過程的解析和初始化階段

將常量池的符號引用替換為具體的直接引用。用一組符號來描述被引用的目標,引用的目標不一定載入到記憶體中。直接引用可以是直接指向目標的指標,相對偏移量活著間接定位到目標的控制代碼。有了直接引用,引用的目標一定在虛擬機器中。比較複雜,深入理解jvm p222 靜態語句塊不能訪問 public class ...

java經典面試題(類載入和初始化順序)

public class test class singleton public static singleton getinstance 列印結果 count1 1 count2 0 分析 1.呼叫singleton.getinstance 的時候首先載入類靜態成員變數,給靜態成員 變數賦預設初始...