反射机制的问题引出

一个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的运行结果

引用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方法

运行结果: 

反射的优点在于不需要动源代码就可以实现改变调用方法

这时把properties文件的方法名改为hi1

class=text01.Cat
methood=hi1
    public void hi1(){
        System.out.println("hi1======");
    }

此时调用到的是cat对象的hi1方法

源代码未改变

method.invoke(o);

运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值