java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError的區別

作者:fjin http://www.blogjava.net/fjin/archive/2008/09/25/231180.html

 

        這2個東西應該是java裏很常見,很簡單,他們都和classpath設定有關,但區別在哪裏呢? 我們都知道java裏生成對象有如下兩種方式:
        1:Object obj = new ClassName(); 直接new一個對象
        2:Class clazz = Class.forName(ClassName);
              Object obj = clazz.newInstance(); 通過class loader動態裝載一個類,然後獲取這個類的實例

        同樣是生成對象,1在編譯期間檢查classpath, 如果沒有類定義,編譯沒法通過。而2在編譯期間是不會檢查的,不過需要拋出或者自己catch ClassNotFoundException。 運行期間,如果1編譯時依賴的類不在classpath中(導致classloader裝載失敗),此時拋出的異常就是 NoClassDefFoundError。而如果2在運行期間需要裝載的類不在classpath中,拋出的則是 ClassNotFoundException。

 

NoClassDefFoundError是編譯期間能找到,但runtime找不到。而ClassNotFoundException則是說runtime找不到,因爲編譯期間是不做檢查的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章