什么是反射
反射机制在java中可以说是非常强大的,很多优秀的开源框架都是通过反射完成的。在java的运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。下面介绍下基于反射技术的函数方法。
与反射相关的,其实主要就是几个关键的函数方法。可以先从这一段简单的代码看起
public void execute(String className, String methodName) throws Exception {
Class clazz = Class.forName(className);
clazz.getMethod(methodName).invoke(clazz.newInstance()); }
在这段代码里可以先看到几个与Java反射相关的重要方法。
forname()
当无法事先知道将加载什么类的时候,就可以用class的静态方法forname来实现动态加载类,例如例如上面的实例代码。
forname静态方法也有两个版本,如下:
public static Class> forName(String className)throws ClassNotFoundException
public static Class> forName(String name, boolean initialize,ClassLoader loader)throws ClassNotFoundException
第一个就是仅通过指定类名。
第二个可以指定类名称、是否初始化及指定类加载器。这里第二个参数中的的初始化指的是类的初始化,例如p神在圈子里给出的一个例子:
public class TrainPrint {
{
System.out.printf("Empty block initial %s\n", this.getClass());
}
static {
System.out.printf("Static initial %s\n", TrainPrint.class);
}
public TrainPrint() {
System.out.printf("Initial %s\n", this.g