反射—案例
练习-反射
需求:写一个“框架”,不能改变类的任何代码的前提下,可以帮我们创建任意类的对象 并且执行其中任意方法
实现:
1.配置文件
2.反射
步骤:
1. 将需要创建的对象的全类名和需要执行的方法定义在配置文件中
2.在程序中加载读取配置文件
3.使用反射技术来加载类文件内存
4.创建对象
5.执行方法
代码:
学生类:
public class Student {
  // 创建了一个sleep方法
    public void sleep(){
        System.out.println("sleep~");
    }
}
Person类:
public class Person {
  // 成员变量
    public String name;
    public int age;
    private int a;
    int ab;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public Person() {
    }
    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 +
                '}';
    }
    // 成员方法
    public void eat(){
        System.out.println("吃东西");
    }
}
配置类:
className=bai.demoReflect.Student methodName=sleep
测试类:
public static void main(String[] args) throws Exception {
        // 1.加载配置文件
        // 1.1创建Properties对象
        Properties pro=new Properties();
        // 1.2加载配置文件 转换为一个集合
        // 1.2.1获取class目录下的配置文件
        ClassLoader classLoader = ReflectTest.class.getClassLoader();
        InputStream is = classLoader.getResourceAsStream("pro.properties");
        pro.load(is);
        // 2.获取配置文件中定义的数据
        String className = pro.getProperty("className");
        String methodName = pro.getProperty("methodName");
        // 3.加载该类进内存
        Class cls = Class.forName(className);
        // 4.创建对象
        Object obj = cls.newInstance();
        // 5.获取方法对象
        Method method = cls.getMethod(methodName);
        // 6.执行方法
       method.invoke(obj);
    }
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号