定义
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).来获得数据库连接驱动
来源:CSDN
作者:王云召
链接:https://blog.csdn.net/wangyunzhao007/article/details/103478012