黑马程序员技术交流社区

标题: 用反射的方式构造类的实例、调用方法、设置属性 [打印本页]

作者: 老衲玩IT    时间: 2013-8-27 08:26
标题: 用反射的方式构造类的实例、调用方法、设置属性
package com.itheima;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
*  定义一个Person类,包含属性name、age。
* 使用反射的方式创建一个实例、调用构造函数初始化name、age,使用反射方式
* 调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值。
* @author Administrator
*
*/
public class Test {
        private static Class clazz;

        public static void main(String[] args) {
                try {
                        //使用反射的方式创建一个实例
                        Class clazz=Class.forName("com.itheima.Person");
                        Constructor constructor=clazz.getConstructor(String.class,int.class);
                       
                        //调用构造函数初始化name、age
                        Person person=(Person) constructor.newInstance("小明",22);
                        System.out.println(person);
                       
                        //使用反射方式 调用setName方法对名称进行设置
                        Method setName=clazz.getDeclaredMethod("setName", String.class);
                        setName.invoke(person, "小明明");
                        System.out.println(person);
                       
                        //不使用setAge方法直接使用反射方式对age赋值
                        Field field=clazz.getDeclaredField("age");
                        if (!field.isAccessible()) {
                                field.setAccessible(true);
                        }
                        field.set(person, 222);
                        System.out.println(person);
                       
                } catch (Exception e) {
                       
                        e.printStackTrace();
                }
        }
        class Person{
                private String name;
                private int age;
               
                public Person(String name, int age) {
                        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;
                }
                @Override
                public String toString() {
                        return "Person [name=" + name + ", age=" + age + "]";
                }
               
        }

}







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