入学测试时,考过这个题,自己也是找了半天才总结出来,完全通过反射来创建实例对象,调用构造方法、成员方法以及操作私有成员变量,代码如下:- /**
- * 定义一个标准的JavaBean,名叫Person,包含属性name、age。使用反射的方式创建一个实例、调用构造函数初始化name、age,
- * 使用反射方式调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值。
- * @author Administrator
- *
- */
- public class Test7{
-
- public static void main(String[] args) throws Exception{
- //通过反射来创建实例
- Constructor con=Person.class.getConstructor(String.class,Integer.class);
- //通过反射来调用构造函数初始化name、age
- Person person=(Person)con.newInstance("张三",18);
- //通过反射来调用setName方法对名称进行设置
- Method method=Person.class.getMethod("setName", String.class);
- method.invoke(person, "李四");
- //通过反射来直接对age赋值
- Field field=person.getClass().getDeclaredField("age");
- field.setAccessible(true);
- field.set(person, 20);
- //通过反射来取出name、age的值
- Field fieldName=person.getClass().getDeclaredField("name");
- Field fieldAge=person.getClass().getDeclaredField("age");
- //对于private修饰的私有成员变量得先设置才能访问
- fieldName.setAccessible(true);
- fieldAge.setAccessible(true);
- //输出姓名和年龄
- System.out.println(fieldName.get(person)+","+fieldAge.get(person));
- }
- }
- //定义JavaBean
- class Person{
- //定义属性name、age
- private String name;
- private Integer age;
-
- public Person(){
-
- }
-
- //构造函数初始化name、age
- public Person(String name,Integer age){
- this.name=name;
- this.age=age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- }
复制代码 |