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