Java反射 反射的基本使用

1 使用步骤

  1. 从配置文件中读取类字符串,配置文件可以是properties , 和xml
  2. 实例化类:使用 Class.forName(String className) 加载字符串类名, 使用 cls.newInstance() 进行类的实例化
  3. 获取方法对象:使用 Class.getMethod(String methodName) 获取方法对象
  4. 使用方法对象的 invoke(Object o) 函数,传入实例化的对象,实现反射

2 代码

  1. 从配置文件中读取 字符串配置
// 1. 使用Properties类,读取properties文件

InputStream re = new FileInputStream("Chapter23_reflection/src/re.properties");
Properties properties = new Properties();
properties.load(re);

// 2 获取其中 字符串的值
String classPath = properties.get("class_path").toString();
String menthodName= properties.get("method").toString();

System.out.println(classPath + ", " + menthodName);

  1. 实例化类
// 3.1 加载类名为“classPath”的类
Class cls = Class.forName(classPath);  // 可能会找不到,抛出异常
// 3.2 实例化对象
Object o = cls.newInstance();

  1. 获取方法对象,实现反射
// 3.3 获取要使用的方法
Method method = cls.getMethod(menthodName);
// 3.4 method对象来适配对象
method.invoke(o);

3 全部代码

  • 文件目录

在这里插入图片描述

  1. JavaBean
public class Cat {

    private String name;

    public Cat(String name) {
        this.name = name;
    }

    public Cat() {

        this.name = "Tom";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void hi() {
        System.out.println(name + "say: \'Hi\'");
    }

    public void cry() {
        System.out.println(name + ", 喵~");
    }

}


  1. 配置文件
class_path=com.hlq.Cat
method=cry
  1. 使用反射
public class CatReflectTest {

    public static void main(String[] args) throws IOException, ClassNotFoundException, IllegalAccessException,
            InstantiationException, NoSuchMethodException, InvocationTargetException {

        // 1. 使用Properties类,读取properties文件

        InputStream re = new FileInputStream("Chapter23_reflection/src/re.properties");
        Properties properties = new Properties();
        properties.load(re);

        // 2 获取其中 字符串的值
        String classPath = properties.get("class_path").toString();
        String menthodName= properties.get("method").toString();

        System.out.println(classPath + ", " + menthodName);


        // 3. 反射机制的使用

        // 3.1 加载类名为“classPath”的类
        Class cls = Class.forName(classPath);  // 可能会找不到,抛出异常
        // 3.2 实例化对象
        Object o = cls.newInstance();

        // 
        if (o instanceof Cat) {
            ((Cat)o).setName("Tomm");
        }

        // 3.3 获取要使用的方法
        Method method = cls.getMethod(menthodName);
        // 3.4 method对象来适配对象
        method.invoke(o);


    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值