為什麼反射機制要依賴類的無參構造方法
阿新 • • 發佈:2019-01-06
本文轉載http://blog.sina.com.cn/s/blog_6151984a0100kwy0.html
反射機制出現的InstantiationException異常
做反射機制時,執行如下的語句: Class class1 = Class.forName(className); Object o1 = class1.newInstance(); 出下面的異常: Exception in thread "main" java.lang.InstantiationException: classtest.PersonServiceBean at java.lang.Class.newInstance0(Class.java:340) at java.lang.Class.newInstance(Class.java:308) at classtest.JustTest.classInstanceTest(JustTest.java:33) at classtest.JustTest.main(JustTest.java:13)
進行debug除錯: 程式執行到Class.class檔案, try { Class[] empty = {}; final Constructor<T> c = getConstructor0(empty, Member.DECLARED); //執行到此句時,出noSuchMethod異常,跳到catch java.security.AccessController.doPrivileged (new java.security.PrivilegedAction() { public Object run() { c.setAccessible(true); return null; } }); cachedConstructor = c; } catch (NoSuchMethodException e) { //出現noSuchMethod異常 throw new InstantiationException(getName()); //丟擲的是java.lang.InstantiationException } }
分析:
說明沒有對應的Method,顯然應該是沒有對應的Constructor Method--無參構造方法
測試類本來沒有構造方法,那麼預設JAVA會自動生成一個無參構造方法.
但後來因為測試類加入了一個有參的構造方法,這樣JAVA就不再提供預設的無參構造.
解決:
顯示的定義一個無參構造方法
備註:InstantiationException也發生在對Interface,SuperClass呼叫反射機制例項化物件的時候.