Java-反射简介及例子

无人久伴 提交于 2019-12-10 18:43:26

定义

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

实例

接下来呢通过一个实际的例子进行反射的解释,更加高级的解释和属性请看:https://www.jianshu.com/p/9be58ee20dee

package test;

//工厂类
public class Factory {
    public static CaluTemplate createOperator(String operate){
        CaluTemplate calu=null;
        try{
            // 通过读取配置文件的工具类,从配置文件中寻找用户输入的运算符,并返回运算符所对应的运算类名称
            String value=  Read.readPro(operate);
            // 利用反射实例化对应的运算类
            calu=(CaluTemplate)Class.forName("test."+value).newInstance();

        }catch(Exception e){
            e.printStackTrace();
        }
        return  calu;
    }
}
package test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
//工具类-读取配置文件中属性值
public class Read {
    public static String readPro(String str) {
        Properties properties = new Properties();
        InputStream inputStream = Object.class.getResourceAsStream("/application.properties");
        try {
            properties.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return (String) properties.get(str);
    }
}

 在上两个类中,主要是在工厂类中用到了反射,根据传入参数去配置文件中获取需要实例化的类的名称,用反射将与配置文件中同名的类实例化即可。

forName的括号中值得注意的一点是,需要把包名也写进去,他会找到这么包这边的同名的类,然后newInstance()实例化。这个是反射最基础的应用。

反射相关类包括类中的方法,比如可以用反射获得反射类的全部方法,或者全部属性,详情请参考https://www.jianshu.com/p/9be58ee20dee

应用场景

1.工厂模式:Factory类中用反射的话,添加了一个新的类之后,就不需要再修改工厂类Factory了
2.数据库JDBC中通过Class.forName(Driver).来获得数据库连接驱动

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!