我們都知道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。