黑马程序员技术交流社区

标题: 反射调用获取构造方法就报错? [打印本页]

作者: dubei1993    时间: 2016-6-1 15:07
标题: 反射调用获取构造方法就报错?
package cn.itcast_02;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/*
* 定义一个标准的JavaBean,名叫Person,包含属性name、age。使用反射的方式创建一个实例、
* 调用构造函数初始化name、age,使用反射方式调用setName方法对名称进行设置,
* 不使用setAge方法直接使用反射方式对age赋值。
*/
public class ReflectDemo01 {
public static void main(String[] args)throws Exception {
//创建字节码对象
Class c=Person.class;
//获得带参构造函数
Constructor con1=c.getDeclaredConstructor(String.class,int.class);
//创建实例化对象
Object obj=con1.newInstance("林青霞",27);
System.out.println(obj);

//获得setName方法
Method method=c.getMethod("setName", String.class);
//赋值
method.invoke(obj, "风清扬");
System.out.println(obj);

//获取成员变量对象
Field ageField=c.getDeclaredField("age");
//跳过检查
ageField.setAccessible(true);
//赋值
ageField.set(obj, 30);
System.out.println(obj);
}
//标准的学生类
class Person{
private String name;
private int age;
public Person() {
  super();
  // TODO Auto-generated constructor stub
}
public Person(String name, int age) {
  super();
  this.name = name;
  this.age = age;
}
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;
}

}
}


作者: dubei1993    时间: 2016-6-1 15:09
异常提示:
Exception in thread "main" java.lang.NoSuchMethodException: cn.itcast_02.ReflectDemo01$Person.<init>(java.lang.String, int)
        at java.lang.Class.getConstructor0(Unknown Source)
        at java.lang.Class.getDeclaredConstructor(Unknown Source)
        at cn.itcast_02.ReflectDemo01.main(ReflectDemo01.java:18)





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