我們都知道java里生成對(duì)象有如下兩種方式:
1:Object obj = new ClassName();
直接new一個(gè)對(duì)象
2:Class clazz = Class.forName(ClassName);
Object obj = clazz.newInstance();
通過class loader動(dòng)態(tài)裝載一個(gè)類,然后獲取這個(gè)類的實(shí)例
同樣是生成對(duì)象,1在編譯期間檢查classpath, 如果沒有類定義,編譯沒法通過。而2在編譯期間是不會(huì)檢查的,不過需要拋出或者自己catch ClassNotFoundException。 運(yùn)行期間,如果1編譯時(shí)依賴的類不在classpath中(導(dǎo)致classloader裝載失敗),此時(shí)拋出的異常就是 NoClassDefFoundError。而如果2在運(yùn)行期間需要裝載的類不在classpath中,拋出的則是 ClassNotFoundException。