類的載入 載入,鏈結 驗證 準備)

2021-10-07 11:16:35 字數 1781 閱讀 4781

public jclass(classfile classfile)  else 

this.inte***cenames = classfile.getinte***cenames();

this.fields = parsefields(classfile.getfields());

this.methods = parsemethods(classfile.getmethods());

this.runtimeconstantpool = parseruntimeconstantpool(classfile.getconstantpool());

}  開始敘述過程①設定搜尋路徑classfilereader.setuserclasspath(string.join(file.separator,testpath,"user","test4"));②查詢這個類是否已經被載入過(如果乙個類已經被載入過,可以在方法區中找到它),如果已經載入過,從方法區中取出這個類,返回。如果沒有,開始以下操作③讀取程式——>得到二進位制位元組流(byte[ ])和definingentry,definingentry用於標識這個類的類載入器是誰(對應載入階段三件事的ⅰ)public jclass loadclass(string classname, entrytype initiatingentry) throws classnotfoundexception

return ret;

}

private jclass loadnonarrayclass(string classname, entrytype initiatingentry) throws classnotfoundexception

private void resolvesuperclass(jclass clazz) throws classnotfoundexception else

}private void resolveinte***ces(jclass clazz) throws classnotfoundexception else if(judge==『b』)else if(judge==『c』)else if(judge==『s』)else if(judge==『i』)else if (judge==『f』)else if(judge==『j』)else if(judge==『d』)else

}private void loadvaluefromrtcp(jclass clazz, field field) else if (judge == 'b') else if (judge == 'c') else if (judge == 's') else if (judge == 'i') else if (judge == 'j') else if (judge == 'd') else if (judge == 'f') else

}}⑩,到這邊,jclass的除了非靜態字段以外的所有資訊已經具備,把jclass放入方法區中,這樣jclass攜帶的所有資訊就放入了方法區中methodarea.addclass(clazz.getname(),clazz); 最後思考:為什麼設定id的時候long和double要用2個id呢因為:vars中的slot[ ] varslot,其元素為slot,結構如下public class slot 如果往vars存入jobject,用到的是slot中的jobject,integer用不到如果往vars中存入基本資料型別,用到slot中的integer,jobject用不到因為long和double都是64位,而int位32位,為了防止精度丟失,我們都是把long和double拆成2個int存放在varslot中,所以要佔2個id,對應varslot中2個位置

編譯 鏈結 載入

2013 02 25 15 52 2177人閱讀 收藏 舉報 目錄 c語言的編譯鏈結過程要把我們編寫的乙個c程式 源 轉換成可以在硬體上執行的程式 可執行 需要進行編譯和鏈結。編譯就是把文字形式源 翻譯為機器語言形式的目標檔案的過程。鏈結是把目標檔案 作業系統的啟動 和用到的庫檔案進行組織形成最終生...

類載入器載入順序

先上 public class parent static public parent public static void staticmethod1 public static void staticmethod2 測試類 public static void main string args ...

JVM 類載入機制 類載入器

類宣告週期 檔案格式驗證 基於二進位製流,只有這一步是基於二進位製流,後續步驟都是基於方法區資料 1.魔數 cafe babe 開頭 2.主次版本是否在當前jvm支援範圍 3.常量池的常量是否不被支援 4.很多很多規範 元資料驗證 1.類是否有父類,object 2.匪類是否繼承了被final修飾的...