本文转载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调用反射机制实例化对象的时候.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。