黑马程序员技术交流社区
标题:
怎么还是报错呢?
[打印本页]
作者:
张学东
时间:
2012-10-27 23:52
标题:
怎么还是报错呢?
package com.itheima.fans;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class Demo4 {
/**
* 通过Class调用其他类中的构造函数 ,
* 也可以通过这种方式通过Class创建其他类的对象
*/
public static void main(String[] args) {
Class demo=null;
try {
demo=Class.forName("com.itheima.fans.Person");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Person per1=null;
Person per2=null;
Person per3=null;
Person per4=null;
//取得全部的构造函数
Constructor<?> cons[]=demo.getConstructors();
System.out.println(cons.length);
try {
per1=(Person)cons[0].newInstance();
per2=(Person)cons[1].newInstance("zhangsan");
per3=(Person)cons[2].newInstance(25);
per4=(Person)cons[3].newInstance("zhangsan",25);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(per1);
System.out.println(per2);
System.out.println(per3);
System.out.println(per4);
}
}
class Person{
private String name;
private int age;
public Person() {
}
public Person(String name){
this.name=name;
}
public Person(int age){
this.age=age;
}
public Person(String name, int age) {
this.age=age;
this.name=name;}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "["+this.name+" "+this.age+"]";
}
}
复制代码
作者:
张学东
时间:
2012-10-28 11:30
怎么就沉了呢??
作者:
张学东
时间:
2012-10-28 16:53
..............
作者:
徐升兴
时间:
2012-10-28 17:14
本帖最后由 徐升兴 于 2012-10-28 17:18 编辑
0_OBU}Z4WVZSP]@D]A~7W.jpg
(61.38 KB, 下载次数: 11)
下载附件
2012-10-28 17:02 上传
从提示中可以看出,第一个错误是因为找不到你所要获取的字节码的类
第二个错误是是说空指针异常,先不要管
所以要改一下15行的demo=Class.forName("com.itheima.fans.Person");
把前面的包名去掉
修改完这个之后,你会发现编译没错了,但是运行会报异常
异常的意思是传入了错误的参数列表,也就是你创建对象的时候传入参数错误
作者:
李靖
时间:
2012-10-28 20:21
for(Constructor constructor:cons){
System.out.println(constructor);
}
可以查看构造方法顺序是:
public Person()
public Person(java.lang.String,int)
public Person(int)
public Person(java.lang.String)
就可以发现你的构造方法的传参错了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2