classloder的作用
.class文件-->類裝載器-->執(zhí)行引擎-->本地方法-->操作系統(tǒng)
class文件可以來自網(wǎng)絡(luò)服務(wù)器等途徑眉菱,來源比較有可定制性嫁佳。比如zip文件,網(wǎng)絡(luò)怜俐,甚至運行時動態(tài)生成的class
java類裝載的委托模型
自定義裝載器-->應(yīng)用類裝載器(用戶程序的classpath)-->擴展類裝載器-->啟動類裝載器
總是把類裝載請求發(fā)給上一層,如果上層沒有,再看自己有沒有耀销。
類文件和類裝載器唯一確定一個類(即類裝載器運行時的命名空間)
defineClass方法
- 傳遞給這個方法一個合法的字節(jié)數(shù)組,就可以轉(zhuǎn)化成class對象
類加載
加載-->連接-->初始化
加載:通過類的全限定名找到類的二進制流铲汪。方法區(qū)生成該類代表的數(shù)據(jù)結(jié)構(gòu)熊尉。內(nèi)存生成該類的對象,作為方法區(qū)各種數(shù)據(jù)結(jié)構(gòu)的外部接口
連接
驗證 對格式掌腰,元數(shù)據(jù)狰住,字節(jié)碼,符號引用進行驗證
準(zhǔn)備 將類的靜態(tài)變量進行內(nèi)存分配和賦初值
解析 將類中的符號引用轉(zhuǎn)化為直接引用
- 初始化:調(diào)用類的clinit構(gòu)造器方法