📅  最后修改于: 2023-12-03 15:31:58.255000             🧑  作者: Mango
Java中的反射机制指的是程序在运行中可以动态地获取一个类的信息以及调用它的方法。通过反射机制,可以向程序中加入一些动态性和灵活性,但同时也增加了程序的复杂度和不安全性。
获取类加载器,可以使用getClassLoader()
方法,也可以使用Thread.currentThread().getContextClassLoader()
方法。
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
获取类信息,可以通过java.lang.Class
类的forName()
方法获取,也可以通过对象的getClass()
方法获取。获取到类信息之后,就可以获取该类的各种信息了。
// 通过类名获取类信息
Class<?> clazz = Class.forName("com.example.demo.Test");
// 通过对象获取类信息
Test test = new Test();
Class<?> clazz = test.getClass();
获取类的构造器,可以使用getConstructor()
方法或者getDeclaredConstructor()
方法,前者只能获取public修饰的构造器,后者可以获取所有的构造器,包括private修饰的。
// 获取public修饰的构造器
Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
// 获取所有的构造器
Constructor<?> constructor = clazz.getDeclaredConstructor(String.class, int.class);
获取类的成员变量,可以使用getField()
方法或者getDeclaredField()
方法,前者只能获取public修饰的成员变量,后者可以获取所有的成员变量,包括private修饰的。
// 获取public修饰的成员变量
Field field = clazz.getField("name");
// 获取所有的成员变量
Field field = clazz.getDeclaredField("name");
获取类的方法,可以使用getMethod()
方法或者getDeclaredMethod()
方法,前者只能获取public修饰的方法,后者可以获取所有的方法,包括private修饰的。
// 获取public修饰的方法
Method method = clazz.getMethod("getName");
// 获取所有的方法
Method method = clazz.getDeclaredMethod("getName");
调用类的方法,可以使用invoke()
方法。
method.invoke(test);