反射—案例
练习-反射
需求:写一个“框架”,不能改变类的任何代码的前提下,可以帮我们创建任意类的对象 并且执行其中任意方法
实现:
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号