为什么反射机制要依赖类的无参构造方法?

  • 反射机制出现的InstantiationException异常
做反射机制时,执行如下的语句:
Class class1 = Class.forName(className);
Object o1 = class1.newInstance();

出下面的异常:
Exception in thread "main" java.lang.InstantiationException: classtest.PersonServiceBean
    at java.lang.Class.newInstance0(Class.java:340)
    at java.lang.Class.newInstance(Class.java:308)
    at classtest.JustTest.classInstanceTest(JustTest.java:33)
    at classtest.JustTest.main(JustTest.java:13)

进行debug调试:   
程序运行到Class.class文件,
    try {
        Class[] empty = {};
           final Constructor<T> c = getConstructor0(empty, Member.DECLARED); 
                                    //执行到此句时,出noSuchMethod异常,跳到catch
                java.security.AccessController.doPrivileged
                    (new java.security.PrivilegedAction() {
                            public Object run() {
                                c.setAccessible(true);
                                return null;
                            }
                        });
                cachedConstructor = c;
            } catch (NoSuchMethodException e) {     //出现noSuchMethod异常
                throw new InstantiationException(getName());    
                     //抛出的是java.lang.InstantiationException
            }
        }

分析:
说明没有对应的Method,显然应该是没有对应的Constructor Method--无参构造方法
测试类本来没有构造方法,那么缺省JAVA会自动生成一个无参构造方法.
但后来因为测试类加入了一个有参的构造方法,这样JAVA 就不再提供缺省的无参构造.

解决:
显示的定义一个无参构造方法
注:InstantiationException也发生在对Interface,SuperClass调用反射机制实例化对象的时候.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值