《自己動手寫Java虛擬機器》學習筆記(二)搜尋class檔案

NO IMAGE

第二章 搜尋class檔案

在載入類前,需要載入它的父類。本章主要講述的是對於一個java類對應的class檔案搜尋。

2.1類路徑

1.這裡涉及到jvm的類路徑有三種:

①.bootstrap classpath從jre\lib載入

②.extension classpath從jre\lib\ext載入

③.application classpath從三方類庫載入

有沒有想起jvm的類載入機制?<類載入機制,走你!>

2.java命令

java -cp path\to\classes …

java -cp path\to\lib1.jar …

java -cp path\to\zip2.zip …

windows下可以分號分隔,類unix下都是冒號分隔。

java1.6後還可以通過萬用字元(*)指定某目錄下所有的jar

那麼問題來了?有沒有發現java命令可以解析jar和zip?這是因為jar和zip都是壓縮形式的,但是壓縮格式不同。

2.2 Go語言語法

1.Go的函式或方法允許返回多個值。

2.Go繼承中,不需要實現介面,只要方法匹配即可。

3.Go沒有專門的建構函式。

//函式識別符號  使用者型別 方法名        形參        型別    返回值
func (self *TestClass) dosomething(inputString string) ([]byte , error) {...}

2.3本章小結

1.jvm解析classpath選項:

-Xjre解析啟動類路徑和拓展類路徑。優先使用使用者輸入的-Xjre作為jre目錄。如果沒有輸入該選項,則在當前目錄下尋找jre目錄。如果找不到,嘗試使用JAVA_HOME環境變數。

-classpath/-cp為解析使用者類路徑。如果使用者沒有提供該選項,則使用當前目錄作為使用者類路徑。

2.jvm根據由第1步處理得到的結果,去尋找.class檔案。

①如果帶有*(形如:lib\*),則匹配一個目錄下的所有.class

②如果帶有jar/JAR/zip/ZIP,則需要遍歷壓縮包裡的檔案,看是否能夠找到.class

③如果帶有“;”(多個源),則需要對每一個源進行挨個處理

④一般情況,即直接指定.class檔案。