【補充】
按需裝載:(運行時動態(tài)裝載)
1.裝載條件:當一個類的靜態(tài)成員被第一次引用時,JVM就會去裝載它,包括【靜態(tài)方法-靜態(tài)屬性-構(gòu)造方法】,這里的構(gòu)造方法也就是老師視頻里提到使用new關(guān)鍵字實例化對象。
2.按需裝載流程:JVM會檢查該類的Class對象是否存在已經(jīng)加載,如果沒有,則執(zhí)行以下步驟。
1)加載:查找并導入類的字節(jié)碼,創(chuàng)建Class對象
2)鏈接:其中分為三步①校驗:檢查導入的字節(jié)碼的完整性,正確性、安全性。②準備:為靜態(tài)域分配存儲空間③解析:將符號引用轉(zhuǎn)折為直接引用(非必需)
3)初始化:初始化靜態(tài)變量并執(zhí)行靜態(tài)域代碼
希望大家頂上去,讓更多人看到,幫助理解JVM類加載機制
按需裝載:(運行時動態(tài)裝載)
1.裝載條件:當一個類的靜態(tài)成員被第一次引用時,JVM就會去裝載它,包括【靜態(tài)方法-靜態(tài)屬性-構(gòu)造方法】,這里的構(gòu)造方法也就是老師視頻里提到使用new關(guān)鍵字實例化對象。
2.按需裝載流程:JVM會檢查該類的Class對象是否存在已經(jīng)加載,如果沒有,則執(zhí)行以下步驟。
1)加載:查找并導入類的字節(jié)碼,創(chuàng)建Class對象
2)鏈接:其中分為三步①校驗:檢查導入的字節(jié)碼的完整性,正確性、安全性。②準備:為靜態(tài)域分配存儲空間③解析:將符號引用轉(zhuǎn)折為直接引用(非必需)
3)初始化:初始化靜態(tài)變量并執(zhí)行靜態(tài)域代碼
希望大家頂上去,讓更多人看到,幫助理解JVM類加載機制
2018-01-25
這里補充一下類的加載機制:
1.預先加載
這里有Java基礎類的加載和含main()函數(shù)類的加載。
Java類的加載流程:啟動程序→到jdk目錄下找到并載入jvm.dll→啟動虛擬機→初始化參數(shù)→創(chuàng)建BootStrap Loader對象,稱為啟動類裝載器,它會在虛擬機啟動時一次性加載JJVM的基礎類。
含main函數(shù)的類加載:BootStrap Loader裝載定義在sun.misc命名空間下的Launcher類。Launcher類有兩個內(nèi)部類,ExcClassLoader和AppClassLoader,含有main函數(shù)的類由AppClassLoader加載。
2.按需加載
篇幅有限下文補充。
1.預先加載
這里有Java基礎類的加載和含main()函數(shù)類的加載。
Java類的加載流程:啟動程序→到jdk目錄下找到并載入jvm.dll→啟動虛擬機→初始化參數(shù)→創(chuàng)建BootStrap Loader對象,稱為啟動類裝載器,它會在虛擬機啟動時一次性加載JJVM的基礎類。
含main函數(shù)的類加載:BootStrap Loader裝載定義在sun.misc命名空間下的Launcher類。Launcher類有兩個內(nèi)部類,ExcClassLoader和AppClassLoader,含有main函數(shù)的類由AppClassLoader加載。
2.按需加載
篇幅有限下文補充。
2018-01-25
有一部分老師沒有講,不過源碼中找到了,也就是先獲取它的get方法,因為get方法,都是get然后屬性的大寫字母+小寫,然后通過這個get方法去找到這個方法的對象,用它去反射直接使用這個方法來獲取屬性的值,所以感覺同理,如果獲取的是set方法也能進行賦值吧
2018-01-04