以下是 java.lang.reflect 包中的主要类和接口的详细介绍:
- Class 类
功能:表示类的对象,提供了获取类信息的方法,如字段、方法、构造函数等。
主要方法:
getFields():获取所有公共字段。
getDeclaredFields():获取所有声明的字段,包括私有字段。
getMethods():获取所有公共方法。
getDeclaredMethods():获取所有声明的方法,包括私有方法。
getConstructors():获取所有公共构造函数。
getDeclaredConstructors():获取所有声明的构造函数,包括私有构造函数。
getSuperclass():获取类的父类。
getInterfaces():获取类实现的所有接口。 - Field 类
功能:表示类的字段(属性),提供了访问和修改字段值的方法。
主要方法:
get(Object obj):获取指定对象的字段值。
set(Object obj, Object value):设置指定对象的字段值。
getType():获取字段的数据类型。
getModifiers():获取字段的修饰符(如 public、private)。 - Method 类
功能:表示类的方法,提供了调用方法的能力。
主要方法:
invoke(Object obj, Object... args):调用指定对象的方法。
getReturnType():获取方法的返回类型。
getParameterTypes():获取方法的参数类型。
getModifiers():获取方法的修饰符(如 public、private)。 - Constructor 类
功能:表示类的构造函数,提供了创建对象的能力。
主要方法:
newInstance(Object... initargs):创建一个新实例,使用指定的构造函数参数。
getParameterTypes():获取构造函数的参数类型。
getModifiers():获取构造函数的修饰符(如 public、private)。
package Java反射;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Constructor;
public class ReflectionExample {
public static void main(String[] args) throws Exception {
// 获取 Class 对象
Class<?> clazz = Car.class;
// 创建 Car 对象
Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
Object car = constructor.newInstance("Toyota", 2020);
// 访问和修改字段
Field modelField = clazz.getDeclaredField("model");
Field yearField = clazz.getDeclaredField("year");
// 设置字段为可访问(如果字段是私有的)
modelField.setAccessible(true);
yearField.setAccessible(true);
// 打印原始字段值
System.out.println("Original Model: " + modelField.get(car));
System.out.println("Original Year: " + yearField.get(car));
// 修改字段值
modelField.set(car, "Honda");
yearField.set(car, 2024);
// 打印修改后的字段值
System.out.println("Updated Model: " + modelField.get(car));
System.out.println("Updated Year: " + yearField.get(car));
// 调用方法
Method startMethod = clazz.getMethod("start");
startMethod.invoke(car);
}
}
class Car {
private String model;
private int year;
public Car(String model, int year) {
this.model = model;
this.year = year;
}
public void start() {
System.out.println("The " + model + " car of year " + year + " is starting.");
}
}
标签:反射,java,获取,car,Object,2025,方法,public,构造函数
From: https://www.cnblogs.com/XYu1230/p/18650919