@回首不見彼岸花 @回首不見彼岸花 你說的這部分是jvm加載類的過程,jvm在加載一個類的時候會根據(jù)全類名也就是帶有包名的完整類名找到相應(yīng)的字節(jié)碼文件也就是編譯生成的.class文件,然后生成一個java.lang.Class的類,這個類就是要加載的類,然后還需要 ①校驗,包括字節(jié)碼校驗、元數(shù)據(jù)校驗、符號校驗等,以保證生成的類符合jvm規(guī)范;② 準(zhǔn)備,這個階段會給靜態(tài)變量賦默認初始值,給final的變量賦值。③ 解析,將符號引用解析成直接引用,包括方法解析、接口解析等;④ 初始化,給類的成員變量賦值。完成以上步驟這個類就加載完成了 對象也初始化完成可以用了。
觸發(fā)jvm加載類的時機之一就是調(diào)用class.forname, 還有調(diào)用一個類的靜態(tài)變量或者靜態(tài)方法,還有new,還有jvm啟動時指定的類,這些都會出發(fā)jvm去加載一個類。
另外類的加載機制遵循 ① 全盤委托,一個類的和他依賴和調(diào)用的類都由一個加載器加載 ②雙親委托,加載一個類時總是由父類先去加載,找不到再由子類加載。③緩存機制,所有加載過的類都會被緩存起來,加載一個類時先到緩存里找,如果沒有再去加載class文件。
最后類的加載器包括三種:BootstrapClassLoader 負責(zé)加載核心java類;ExtensionClassLoader,負責(zé)加載lib/ext下的擴展類;ApplicationClassLoader負責(zé)加載classpath下的類。
JAVA動態(tài)代理代理模式 為其他對象提供一個代理以控制對某個對象的訪問。代理類主要負責(zé)為委托了(真實對象)預(yù)處理消息、過濾消息、傳遞消息給委托類,代理類不現(xiàn)實具體服務(wù),而是利用委托類來完成服...