【JAVA 虛擬機器系列知識:整理二】java虛擬機器查詢class檔案原理

來源:互聯網
上載者:User

關於尋找class檔案原理——
建議大家在入門的時候在命令列視窗編譯和運行,不要藉助JCreator或者Eclipse等IDE去協助做那些事情。嘗試自己這樣做:
javac -classpath yourpath *.java
java -classpath yourpath *.class
也許很多人都能看懂,設定classpath的目的就是告訴編譯器去哪裡尋找你的class檔案. 不過至少筆者今日才弄懂JVM去查詢類的原理,編譯器載入類要依靠classloader, 而classloader有3個層級,從高到低分別是BootClassLoader(名字可能不準確) , ExtClassLoader, AppClassLoader.

這3個載入器分別對應著編譯器去尋找類檔案的優先順序別和不同的路徑:BootClassLoader對應jre/classes路徑,是編譯器最優先尋找class的地方
ExtClassLoader對應jre/lib/ext路徑,是編譯器次優先尋找class的地方
AppClassLoader對應當前路徑,所以也是編譯器預設找class的地方

其實大家可以自己寫個程式簡單的測試,對任何class,例如A,
調用new A().getClass().getClassLoader().toString() 列印出來就可以看到,把class檔案放在不同的路徑下再次執行,就會看到區別。特別注意的是如果列印出來是null就表示到了最進階BootClassLoader, 因為它是C++編寫的,不存在Java對應的類載入器的名字。

尋找的順序是一種向上迂迴的思想,即如果本層級找不到,就只能去本層級之上的找,不會向下尋找。不過似乎從Jdk1.4到Jdk1.6這一特點又有改變,沒有找到詳細資料。所以就不舉例子了。告訴大家設計這種體系的是Sun公司曾經的技術核心宮力先生,一個純種華人哦!^_^

這樣希望大家不至於迷惑為什麼總報錯找不到類檔案,不管是自己寫的還是匯入的第三方的jar檔案(J2ee中經常需要匯入的)。

上面的內容摘自http://www.java2000.net/p225,Java 學習雜談(一),感覺寫的很容易理解,拿過來整理一下

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.