java反射概述

90 阅读1分钟

什么是反射

  • java的反射就是在程序运行状态下通过类的Class类对象(反射入口)获得该类的所有信息,并且能够对该类今昔操作的一种间接操作目标类的机制。

什么是Class类

  • java.lang.Class类是提供java反射机制的核心类之一,它是java程序在初始化(initialization)后自动创建存放在堆区的一个储存了对应类所有属性、方法、构造器等信息的对象(class类就像对应java类在镜子中的倒影)。其将对应java类的所有的信息封装并保存,并提供一些接口供程序员访问方法区中的对应类的属性与方法。

反射存在的意义

  • 反射降低了代码的耦合,充分体现了java的动态特性。例如,如果我们利用传统的new关键字进行类的实例化时,需要写明需要实例化的类,此时如果需要实例化的类名有所变化,我们就不得不去修改源码。如果应用反射机制,就可以靠读入配置文件进行对象的实例化,而需要实例化的类发生变化时,只需要修改配置文件即可。以下代码展示了利用反射动态创建对象;
import java.io.FileInputStream;
import java.lang.reflect.Method;
import java.util.Properties;

public class Test {
    public static void main(String[] args) throws Exception {
        //读取配置文件
        Properties properties=new Properties();
        properties.load(new FileInputStream("src\\classInfo.property"));
        String classPath = properties.get("classPath").toString();
        String classMethod = properties.get("classMethod").toString();

        //获取类对应的Class文件
        Class clazz=Class.forName(classPath);
        //利用反射加载对象实例
        Object obj= clazz.newInstance();
    }
}

配置文件classInfo.property:

classPath=com.per.lander.Animal
classMethod=cry