什么是反射
反射(Reflection)主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。(就像照镜子反射一样)
Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的信息以及动态调用对象的属性和方法的功能称为Java语言的反射机制。
反射的基本原理
反射(Reflection)是Java被视为动态语言的关键。反射机制运行程序在执行过程中借助Reflection API取得任何类的内部信息(包括:类名、类的属性、类的成员变量、类的方法等),并能直接操作任意对象的内部属性和方法。
注:即使是private
修饰的成员变量和方法,我们也可以通过反射机制直接获取到这些私有成员。
类加载完成后,会在堆内存的方法区中产生一个Class
类型的对象(一个类只有一个Class对象),这个对象就包含了类的完整的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子可以看到类的结构。所以,我们形象地称之为“反射”。
通过正常方式和反射反射获取实例的过程如下图所示。