问题描述:
Exception in thread "main" java.lang.InstantiationException: com.Dobby.cat at java.lang.Class.newInstance(Class.java:427) at com.Dobby.Reflection01.main(Reflection01.java:23) Caused by: java.lang.NoSuchMethodException: com.Dobby.cat.<init>() at java.lang.Class.getConstructor0(Class.java:3082) at java.lang.Class.newInstance(Class.java:412) ... 1 more
原因分析:
通过反射创建新的类示例,有两种方式:
Class.newInstance()
Constructor.newInstance()
以下对两种调用方式给以比较说明:
Class.newInstance() 只能够调用无参的构造函数,即默认的构造函数;
Constructor.newInstance() 可以根据传入的参数,调用任意构造构造函数。
Class.newInstance() 抛出所有由被调用构造函数抛出的异常。
Class.newInstance() 要求被调用的构造函数是可见的,也即必须是public类型的;
Constructor.newInstance() 在特定的情况下,可以调用私有的构造函数。
所以在类中使用Class.newInstance() 的同时需要在类中有无参构造函数 否则一下报错
解决方案:
public cat(String age) { age = "100"; System.out.println("this cat is "+ age + " age"); } public cat() { }