图灵架构师三期

核心提示课程链接:https://www.itwangzi.cn/3158.html课程链接: https://www.itwangzi.cn/3158.html1、基本概念Java反射机制是在运行状态时,对于任意一个类,都能够获取到这个类的所有属

课程链接: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方法来获取类对象。

 
友情链接
鄂ICP备19019357号-22