关于导致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)

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值