黑马程序员技术交流社区

标题: 关于反射的构造方法 [打印本页]

作者: 唐见    时间: 2012-8-26 22:37
标题: 关于反射的构造方法
package cn.itcast;
public class Test {
  
    public static void main(String[] args){
         try {            
             Person p=Person.class.getConstructor().newInstance();//获取类中的默认构造方法,怎么会出错呢?
             p.printName();
         }catch (Exception e){
             e.printStackTrace();
         }
     }
}
class Person {//本身存在默认构造方法
public void printName(){
  System.out.println("tangjian");
}
}
报异常:
java.lang.NoSuchMethodException: cn.itcast.Person.<init>()
  at java.lang.Class.getConstructor0(Class.java:2706)
  at java.lang.Class.getConstructor(Class.java:1657)
  at cn.itcast.Test.main(Test.java:6)
作者: 杨震    时间: 2012-8-26 22:45
本帖最后由 杨震 于 2012-8-26 22:54 编辑

package cn.itcast;
public class Test {
   
     public static void main(String[] args){
          try {            
             Person p=Person.class.getDeclaredConstructor().newInstance();//getConstructor获取的必须是public的,由于你的Person不是public的,所以其默认构造函数也不是public的,所以应该用我这个方法,其可以返回所有访问级别的构造方法:另外,你也可以将Person单独放一个文件中,并将访问权限改成public也行的
              p.printName();
          }catch (Exception e){
              e.printStackTrace();
          }
      }
}
class Person {//本身存在默认构造方法
         
public void printName(){
        
   System.out.println("tangjian");
}
}
作者: 朱烈葵    时间: 2012-8-26 23:14
楼上说的是,我的理解是为什么要成public呢,原因在于 权限问题,如果你不是最大的,那我访问了算越权了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2