黑马程序员技术交流社区

标题: 问个关于反射的问题 [打印本页]

作者: 莫嘉伟    时间: 2013-3-2 20:14
标题: 问个关于反射的问题
public class Test8 {
        public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException,
        InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
        Class<?> clazz=Class.forName("Apple");
        System.out.println(clazz);
    Constructor ctr=clazz.getConstructor(String.class);
    Object obj=ctr.newInstance("我是一只用反射方式创造的苹果");
    System.out.println(obj);
   
       
        }
}
class Apple{
        String str="我是一只普通苹果";
        Apple(String str){
                this.str=str;
        }
        public void say(String s){
                System.out.println(str+":"+s);
        }
}
这代码抛出了java.lang.NoSuchMethodException异常,可是我Apple类中是有带一个字符串参数的构造器啊,怎么会没有呢,还是说我传类名的时候传错了,可是打印class对象输出也的确是Apple Class啊··求指点
作者: 许鑫星    时间: 2013-3-2 20:37
因为你那个带参数的构造方法没有写成public的。。。你可以试试在前面加个public,应该就可以了。
作者: 张豪杰    时间: 2013-3-2 21:29
你Apple类里面的构造函数没有public修饰,是默认权限,getConstructor只能获取public权限的构造函数
你现在的代码有两种方式解决
1.修改class Apple
  1. class Apple{
  2.         String str="我是一只普通苹果";
  3.        public  Apple(String str){ //这里用publc修饰
  4.                 this.str=str;
  5.         }
  6.         public void say(String s){
  7.                 System.out.println(str+":"+s);
  8.         }
  9. }
复制代码
2.在 class Test8中使用getDeclaredConstructor
  1. public class Test8 {
  2.         public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException,
  3.         InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
  4.         Class<?> clazz=Class.forName("Apple");
  5.         System.out.println(clazz);
  6.     Constructor ctr=clazz.getDeclaredConstructor(String.class);//getDeclaredConstructor可以获取所有权限的构造函数
  7.     ctr.setAccessible(true);//由于Apple类里面的构造函数是默认权限,所以要安全检查
  8.     Object obj=ctr.newInstance("我是一只用反射方式创造的苹果");
  9.     System.out.println(obj);
  10.    
  11.         
  12.         }
  13. }
复制代码





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