关于导致java.lang.InstantiationException异常的原因分析
这个异常多半是由于通过反射在实例化的时候,对应的类里面覆盖了无参构造而导致无法实例化,由于创建类的时候,默认有一个无参构造,前提是没有其他构造方法,如果没有明确的将无参构造写出来,该类就是缺少无参构造了,也就导致了无法实例化
遇到的实际问题如下:
所以建议在创建类的时候,最好还是保留(显式的写出来)无参构造
先保留无参构造,则可以在通过反射实例化的时候,不会抛出异常
请忽略其他参数,(在写一个工具类,从数据库查找数据,根据类进行封装)
输出结果:
去掉无参构造(该类还有其他有参构造)
输出结果就是这样了:
java.lang.InstantiationException: self.bean.Pad
at java.lang.Class.newInstance(Class.java:427)
at self.util.Util.getObject(Util.java:58)
at self.util.Test.main(Test.java:15)
Caused by: java.lang.NoSuchMethodException: self.bean.Pad.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
... 2 more
总结原因:
通过反射来为某个类创建实例的时候,需要该类存在无参构造,不然就会抛出InstantiationException该异常
所以最好还是把无参构造保留的好!(ps:如果无参构造的修饰符被修改为其他的protected private default,将会出现另一个异常java.lang.IllegalAccessException)