A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐见 中级黑马   /  2012-8-26 22:37  /  1705 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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)

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 杨震 于 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");
}
}

评分

参与人数 2技术分 +1 黑马币 +15 收起 理由
唐见 + 15 赞一个!
包晗 + 1

查看全部评分

回复 使用道具 举报
楼上说的是,我的理解是为什么要成public呢,原因在于 权限问题,如果你不是最大的,那我访问了算越权了

评分

参与人数 1黑马币 +30 收起 理由
包晗 + 30

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马