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

来源:互联网 发布:网络作答系统网站 编辑:程序博客网 时间:2024/05/16 12:28
  • 反射机制出现的InstantiationException异常
做反射机制时,执行如下的语句:
Class class1 = Class.forName(className);
Object o1 = class1.newInstance();

出下面的异常:
Exception in thread "main" java.lang.InstantiationException:classtest.PersonServiceBean
    atjava.lang.Class.newInstance0(Class.java:340)
    atjava.lang.Class.newInstance(Class.java:308)
    atclasstest.JustTest.classInstanceTest(JustTest.java:33)
    atclasstest.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 newInstantiationException(getName());    
                    //抛出的是java.lang.InstantiationException
           }
       }分析:
说明没有对应的Method,显然应该是没有对应的Constructor Method--无参构造方法
测试类本来没有构造方法,那么缺省JAVA会自动生成一个无参构造方法.
但后来因为测试类加入了一个有参的构造方法,这样JAVA就不再提供缺省的无参构造.
解决:
显示的定义一个无参构造方法备注:InstantiationException也发生在对Interface,SuperClass调用反射机制实例化对象的时候.

1 0