java安全策略 禁止反射_初探java安全之反射

什么是反射

反射机制在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.getClass());

你可能感兴趣的:(java安全策略,禁止反射)