黑马程序员技术交流社区
标题:
问个关于反射的问题
[打印本页]
作者:
莫嘉伟
时间:
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
class Apple{
String str="我是一只普通苹果";
public Apple(String str){ //这里用publc修饰
this.str=str;
}
public void say(String s){
System.out.println(str+":"+s);
}
}
复制代码
2.在 class Test8中使用getDeclaredConstructor
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.getDeclaredConstructor(String.class);//getDeclaredConstructor可以获取所有权限的构造函数
ctr.setAccessible(true);//由于Apple类里面的构造函数是默认权限,所以要安全检查
Object obj=ctr.newInstance("我是一只用反射方式创造的苹果");
System.out.println(obj);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2