- 反射机制出现的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)
Class class1 = Class.forName(className);
Object o1 = class1.newInstance();
出下面的异常:
Exception in thread "main" java.lang.InstantiationException: classtest.PersonServiceBean
进行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
}
}
程序运行到Class.class文件,
分析:
说明没有对应的Method,显然应该是没有对应的Constructor Method--无参构造方法
测试类本来没有构造方法,那么缺省JAVA会自动生成一个无参构造方法.
但后来因为测试类加入了一个有参的构造方法,这样JAVA 就不再提供缺省的无参构造.
说明没有对应的Method,显然应该是没有对应的Constructor Method--无参构造方法
测试类本来没有构造方法,那么缺省JAVA会自动生成一个无参构造方法.
但后来因为测试类加入了一个有参的构造方法,这样JAVA 就不再提供缺省的无参构造.
解决:
显示的定义一个无参构造方法
显示的定义一个无参构造方法
备注:InstantiationException也发生在对Interface,SuperClass调用反射机制实例化对象的时候.
最后
以上就是清脆钢笔最近收集整理的关于为什么反射机制要依赖类的无参构造方法?的全部内容,更多相关为什么反射机制要依赖类内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复