一个cat对象
public class Cat {
private String name = "小明";
public void hi(){
System.out.println("hi");
}
public void hi1(){
System.out.println("hi1======");
}
}
传统的访问对象方法需要:
Cat cat = new text01.Cat();
cat.hi();
cat.hi1();
利用反射机制进行访问
首先创建一个properties映射文件
类容输入对象的文件路径
写入要调用的方法
class=text01.Cat
methood=hi
开始配置反射机制
// 用Properties类 ,去读写配置文件
Properties properties = new Properties();
// 获取配置文件路径
properties.load(new FileInputStream("src\\text01\\re.properties"));
// 获取对的应信息
String class_ = properties.get("class").toString();
String methoodname = properties.get("methood").toString();
// 获取了classs_对应的信息 text01.Cat
System.out.println(class_);
// 获取了methood对应的信息 hi
System.out.println(methoodname);
String的运行结果
![](https://i-blog.csdnimg.cn/blog_migrate/7038eb284b9b71bce900303c3d48a891.png)
引用Class 类来实现反射机制
引用Method类来实现调用方法
// Class 是一个类
// 加载类 返回一个Class类型 路径
Class cl = Class.forName(class_);
// 通过 cls 得到你加载的类 路径text01.Cat 的对象实例
Object o = cl.getDeclaredConstructor().newInstance();
// 此时obj的运行类型已经是 class_ 的地址了
System.out.println(o.getClass()); // 运行结果 class text01.Cat
// 通过 cl 得到 properties 的 method 对应信息
Method method = cl.getMethod(methoodname);
// 通过 method 类来实现调用 properties 映射中 method 对应的方法名
// 最后实现 Cat cat = (Cat) o; cat.hi();
method.invoke(o);
此时调用到的是cat对象的hi方法
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/463edbe65ff14ad04a34f5fb920580f2.png)
反射的优点在于不需要动源代码就可以实现改变调用方法
这时把properties文件的方法名改为hi1
class=text01.Cat
methood=hi1
public void hi1(){
System.out.println("hi1======");
}
此时调用到的是cat对象的hi1方法
源代码未改变
method.invoke(o);
运行结果
![](https://i-blog.csdnimg.cn/blog_migrate/b9da0a7f925acb8495d0ed758629c648.png)