首页 > 编程语言 > 详细

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

时间:2020-04-21 00:41:13      阅读:101      评论:0      收藏:0      [点我收藏+]

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中抽象类和接口是不能被实例化)

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

原文:https://www.cnblogs.com/kanbudong/p/12741650.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!