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

2021-09-29 01:27:33 字數 877 閱讀 4212

將常量池的符號引用替換為具體的直接引用。

用一組符號來描述被引用的目標,引用的目標不一定載入到記憶體中。

直接引用可以是直接指向目標的指標,相對偏移量活著間接定位到目標的控制代碼。有了直接引用,引用的目標一定在虛擬機器中。

比較複雜,《深入理解jvm》p222

靜態語句塊不能訪問:

public class test1 

static int c;

}

非靜態語句塊可以訪問:

public class test1 

static int c;

public static void main(string args)

}

結果:

3
public class myfather 

public static int a;

}

public class son extends myfather implements myinte***ce 

public static void main(string args)

}

結果:

7
這個例子:

public class test1 extends myfather 

public static int a = 8;

public static void main(string args)

}

結果:

8

類的初始化階段

以下情況發生時,會觸發類的初始化 1 建立了類的例項 2 該類的static方法會被呼叫 3 static域被賦值 4 static域被呼叫 當前域不是乙個常量變數 常量變數 用常量表示式初始化的簡單型別或string型別的final變數,所謂常量表示式就是指簡單型別值貨string物件的表示式 5...

類初始化和例項初始化過程

類初始化過程 乙個類要建立例項需要先載入並初始化該類 main方法所在的類需要先載入和初始化 乙個子類要初始化需要先初始化父類 乙個類初始化就是執行 方法 由靜態類變數賦值 和靜態 塊組成 靜態類變數賦值 和靜態 塊從上往下執行 方法只執行一次 例項初始化過程 例項初始化就是執行 方法 方法可能過載...

類的載入和初始化順序

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