当我们使用 Java 开发时,有时需要获取某个类的信息,例如类的属性、方法和构造函数等,然后在程序运行期间动态地操作它们。Java 反射就是用来实现这个目的的一种机制。

Java 反射(Reflection)是 Java 编程语言在运行时动态获取类的信息以及动态调用对象方法的能力。它可以让程序在运行时动态地操作对象,这使得程序更加灵活。使用反射机制,我们可以在运行时获得类的信息,而不是在编译时确定。

Java 反射提供了以下类来完成相关操作:

  • Class:用于表示类对象;

  • Field:用于表示类的属性;

  • Method:用于表示类的方法;

  • Constructor:用于表示类的构造函数。

下面是一些反射常用的方法:

  1. 获取类对象

获取一个类的 Class 对象有多种方法:

  • 使用 Class.forName(String className) 方法,需要传入类的全限定名,会返回该类的 Class 对象。

  • 使用类名.class,例如 String.class。

  • 使用对象.getClass() 方法,返回对象所属的类的 Class 对象。

  1. 获取类的属性

使用 Class 类的 getField(String name) 方法可以获取类的指定公有属性;使用 getDeclaredField(String name) 方法可以获取类的指定属性(无论是否公有)。

  1. 获取类的方法

使用 Class 类的 getMethod(String name, Class… parameterTypes) 方法可以获取类的指定公有方法;使用 getDeclaredMethod(String name, Class… parameterTypes) 方法可以获取类的指定方法(无论是否公有)。

  1. 获取类的构造函数

使用 Class 类的 getConstructor(Class… parameterTypes) 方法可以获取类的指定公有构造函数;使用 getDeclaredConstructor(Class… parameterTypes) 方法可以获取类的指定构造函数(无论是否公有)。

  1. 动态调用方法

通过反射可以动态调用类的方法,例如:

Class clazz = Class.forName("com.example.MyClass");Object obj = clazz.newInstance();Method method = clazz.getMethod("myMethod", String.class);method.invoke(obj, "parameter");

上述代码中,我们先获取 MyClass 的 Class 对象,然后创建 MyClass 的一个实例,接着获取 myMethod 方法的 Method 对象,最后使用 invoke 方法调用 myMethod 方法并传入参数。

这就是 Java 反射的基本使用方法,如果还不是不明白,请看我下篇文章将写几个简单的例子详细介绍怎么使用。