黑马程序员技术交流社区
标题:
两种实例化在反射里面有什么区别???
[打印本页]
作者:
常万
时间:
2012-5-13 17:52
标题:
两种实例化在反射里面有什么区别???
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
Class<?> c1 = null;//声明一个Class对象
try {
c1 = Class.forName("cn.itcast.test.Person");//实例化Class对象
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Person p = null;//声明一个Person对象
//通过反射取得Class中所有的构造方法
Constructor<?> cons[] = c1.getConstructors();
//调用构造函数
try {
p = (Person)cons[0].newInstance("小忽悠",23);
//p = (Person)c1.newInstance();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
以上是部分代码,
p = (Person)cons[0].newInstance("小忽悠",23);
p = (Person)c1.newInstance();
这两种实例化对象在反射里面有什么区别?求高手!!!
第二种方式我运行程序会报错...
作者:
枫雨叶话
时间:
2012-5-13 17:55
第二种需要你的Person类有无参的构造函数 否则会报错
作者:
张晨
时间:
2012-5-13 18:08
第二种是第一种的简化方式,并且用第二种反射方法实例化类必须是无参的
作者:
冯建鹏
时间:
2012-5-13 22:46
首先p = (Person)c1.newInstance();这句话实例的是无参数的对象,如果有参数的话需要得到字节码文件的构造函数,通过getConstruct(参数...)参数是构造函数里面的类型加上.class因为每个类型都有一个.class对象。
Person p = null;//声明一个Person对象
//通过反射取得Class中所有的构造方法
Constructor cons= c1.getConstructor(String.class,int.class);
//调用构造函数
try {
p = (Person)consnewInstance("小忽悠",23);
//p = (Person)c1.newInstance();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这样应该可以
作者:
抓哇
时间:
2012-5-13 23:00
Person类里你没无参构造函数 你让他反射得到他 他没有你得不到 所以就报错了!!
作者:
常万
时间:
2012-5-14 08:42
冯建鹏 发表于 2012-5-13 22:46
首先p = (Person)c1.newInstance();这句话实例的是无参数的对象,如果有参数的话需要得到字节码文件的构造 ...
呵呵~~我昨天通过查API调试解决了:lol不过还是谢谢哥们·~情况就是你说的这个情况:victory:
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2