反射—案例

 练习-反射

需求:写一个“框架”,不能改变类的任何代码的前提下,可以帮我们创建任意类的对象 并且执行其中任意方法

实现:

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);
    }
posted @ 2022-10-20 15:38  想见玺1面  阅读(14)  评论(0编辑  收藏  举报