课程链接:https://www.itwangzi.cn/3158.html
课程链接:https://www.itwangzi.cn/3158.html

1.基本概念
Java反射机制就是运行时可以获取任何类的所有属性和方法,可以调用任何对象的任何方法和属性。这种动态获取的信息和动态调用对象的方法的功能被称为Java语言的反射机制。java反射机制为漏洞利用提供了很多便利,在很多Java漏洞的exp中我们都能看到它的影子。所以学习java安全离不开它。
2.Java反射形成相关类。
反射机制相关的操作一般位于java.lang.reflect包中。
java反射机制的组成需要注意以下几类:
Java.lang.Class:类对象;
Java.lang.reflect.Constructor:类的构造函数对象;
Java.lang.reflect.Field:类的property对象;
Java.lang.reflect.Method:类的方法对象;
调用反射方法
获取类的方法:forName。
实例化类对象的方法:newInstance
获取函数的方法:getMethod
执行函数的方法:调用

3.获取类对象
类是描述类的类。
类的对象功能是在运行时提供或获取对象的类型信息。
有三种方法可以获得类的实例:
1.实例化对象的getClass方法。
如果在顶部和底部有一个类的实例obj,那么我们可以通过obj.getClass得到它的类
test reflection test reflection = new test reflection;class class 3 = test reflection . get class;
其次,使用。类的类方法。
如果您已经加载了一个类,并且只想获取它的java.lang.Class对象,只需获取它的class属性。这种方法不属于反射。
class class 2 = test reflection . class;
方法三。Class.forName:动态加载类
如果你知道一个类的名字并且想要得到它,你可以使用forName来得到它。
class class 1 = class . for name;
我们可以编写一个简单的示例代码,并使用这三种方法来获取当前类对象的当前类名。

包反射;导入反射。人;的。class属性Class c1 =类反射的person . Class { public static void main throws exception {//Class;system . out . println);//实例化对象的getClass方法,Person person = new PersonClass c2 = person.getClasssystem . out . println);// Class.forName:动态加载class Class c3 = Class.forNamesystem . out . println);}}
通常,我们使用第三种方法通过Class.forName方法动态加载类。而且有了forName,你不需要导入其他类,你可以加载我们的任何一个类。
但是,使用类。class属性需要导入类的包,依赖性太强,在大型项目中容易抛出编译错误;
但是使用getClass方法实例化一个对象需要自己创建一个对象,所以使用反射机制没有任何意义。
因此,我们一般使用Class.forName方法来获取类对象。


