總概括:類加載子系統的主要任務是將字節碼文件加載到內存中(將這個文件從磁盤中加載到內存中)
要完成這個任務,類加載子系統將這個任務分成了三個階段--加載、鏈接、初始化
加載
說明:類加載子系統整個階段叫做加載,這裡的加載是其中一個部分,恰好也叫加載
這個過程的主要任務:通過類的全限定名,將該類從硬盤上加載到內存中,在內存中生成該類的類對象(通俗的說,就是生成這個類,注意是類,不是對象)
public class Student{
private static String country;
private String name;
public void say(){
System.out.println("hello");
}
}
鏈接
鏈接階段,分為三個過程,驗證、準備、解析
1.驗證:對加載進來的文件進行驗證,保證這個類是正確的
- 驗證的必要性,.class文件是文件,那麼就有可能被修改,修改之後格式可能不正確,為確保jvm處理一個正確的類,那麼首先對加載進內存的class進行驗證。
2.準備:為類變量設置為“零”值
public class Student{
private static String country=null;//基本變量賦值為“零”值,所有引用類型賦值為null,常量是在編譯階段就賦值了
private String name;
public void say(){
System.out.println("hello");
}
}
3.解析:將符號引用解析為直接引用
在.class文件中的常量池中有許多引用,由於jvm要提高複用性,所有引用拆分的比較細,在這個過程中將這些符號引用變為直接引用
初始化
作用:類變量的賦值、執行靜態代碼塊
下圖中,學生類就會在該過程將類變量country賦值為China,並且執行靜態代碼塊,打印hello
public class Student{
private static String country="China";//類變量賦值
private String name;
static {//執行靜態代碼塊
System.out.println("hello");
}
}
總結
經過加載、鏈接、初始化,class文件就從磁盤上轉移到內存上了
結尾:如果有什麼疑問,可以在下方評論,我會一一作答
閱讀更多 嘿嘿哎四個窩窩頭 的文章