学习记录(4):java 反射报错:Exception in thread "main" java.lang.InstantiationException: com.paisheng.Persion

1-创建Person类

2-创建Properties文件

className=com.paisheng.Persion
methodName=eat

3-创建ProDemo,利用反射来实现调用

4-运行结果,竟然报错了,

className
Exception in thread "main" java.lang.InstantiationException: com.paisheng.Persion
at java.lang.Class.newInstance(Class.java:427)
at com.thread.ProDemo.main(ProDemo.java:25)
Caused by: java.lang.NoSuchMethodException: com.paisheng.Persion.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
... 1 more

报错地方是c.newInstance()这个地方有问题。查看了下Class类下newInstance对应的3082行报错

parameterTypes传入进来的就是个empty,
arrayContentsEq

 a1是空,那么a2要是空或者长度=0,才能返回true,constructor.getParameterTypes()

java api中对这个方法的解释

=================================

public 类<?>[] getParameterTypes()
返回一个类对象的数组, 类以声明顺序表示由该对象表示的可执行文件的形式参数类型。 如果底层可执行文件没有参数,则返回长度为0的数组

=================================

结果显然是我们只要可执行文件没有参数,才返回长度为0的数据,才不会报错,无参构造方法才满足这个条件。查询原先的Person类。果然是缺少。补充上(或者把有参的构造函数去掉),执行。完美。。。

---------------------------------

后面补充:

java.lang.InstantiationException 是指不能实例化某个对象,除了我碰到的情况外,还有一种情况也会报错(java中抽象类和接口是不能被实例化)

猜你喜欢

转载自www.cnblogs.com/kanbudong/p/12741650.html