📜  Java反射(1)

📅  最后修改于: 2023-12-03 15:32:02.780000             🧑  作者: Mango

Java反射

在Java中,反射是指在运行时(程序运行过程中)动态获取类的信息并操作类的方法、属性、构造方法等。

为什么要使用反射?

Java是一门静态类型语言,即在编译时需要明确声明变量类型。而反射机制提供了以下好处:

  • 可以在程序运行时动态地创建对象、调用方法、访问字段等。这可以在编译时无法确定类的情况下,根据运行时传递的参数来创建对象。
  • 可以在编译时不需要引入依赖,可以直接运行一些不确定的类。
  • 可以允许框架在运行时自动发现、创建和装配组件,使得框架更加灵活。
反射的基本用法

反射可以通过以下步骤来执行:

  1. 获取Class对象

类加载器可以在程序运行时动态加载并获取指定类的Class对象。通过Class对象可以获取类的属性、方法、构造方法等信息。

Class clazz = Class.forName("com.example.MyClass");
  1. 创建对象

使用Class对象可以创建一个类的实例。可以通过反射调用类的默认构造方法或有参构造方法来创建对象。

MyClass obj = (MyClass)clazz.newInstance();
  1. 访问字段

可以使用反射来获得一个类的字段。可以在程序运行时改变字段的值,或获取字段的值并对其进行操作。

Field field = clazz.getDeclaredField("fieldName");
field.setAccessible(true); //必须设置访问权限,否则会报错
field.set(obj, "fieldValue");
System.out.println(field.get(obj));
  1. 调用方法

通过反射也可以调用一个类的方法。可以在程序运行时动态地调用类的方法,而不需要在编译时就确定调用哪些方法。

Method method = clazz.getDeclaredMethod("methodName", parameterTypes);
method.setAccessible(true); //必须设置访问权限,否则会报错
method.invoke(obj, args);
参考资料