反射获取类的结构信息
-
关于Class的API
- getName:获取全类名
- getSimpleName:获取简单类名
- getFields:获取所有Public修饰的属性,包含本类及其父类(不仅仅是直接父类)
- getDeclaredFields:获取本类中的所有属性,不包括父类
- getMethods:获取所有public修饰的方法,包含本类及其父类的(不仅仅是直接父类)
- getDeclaredMethods:获取本类中所有方法,不包括父类
- getConstructors:获取所有public修饰的构造器,不包括父类
- getDeclaredConstructors:获取本类中的所有构造器,不包括父类,构造器不能被继承
- getPackage:以Package形式返回包信息
- getSuperClass:以Class形式返回父类信息
- getInterface:以Class[]形式返回接口信息,不包括父类
- getAnnotations:以Annotation[]形式返回注解信息
-
关于Field的API
- getModifiers:以int的形式返回修饰符
规定说明:默认修饰符是 0, public 是 1, protect 是 2, private 是 4 , static 是 8, final 是 16 - getType:以Class形式返回属性类型
- getName:获得属性名
- getModifiers:以int的形式返回修饰符
-
关于Method的API
- getModifiers:以int的形式返回修饰符
规定说明:默认修饰符是 0, public 是 1, protect 是 2, private 是 4 , static 是 8, final 是 16 - getReturnType:以Class形式返回方法返回值类型
- getName:获得方法名
- getParameterTypes:以Class[]形式返回方法的形参列表
- getModifiers:以int的形式返回修饰符
-
关于Constructor的API
- getModifiers:以int的形式返回修饰符
规定说明:默认修饰符是 0, public 是 1, protect 是 2, private 是 4 , static 是 8, final 是 16 - getName:获得构造器名
- getParameterTypes:以Class[]形式返回构造器的形参列表
- getModifiers:以int的形式返回修饰符
-
案例演示
package com.hspedu.reflection; import org.junit.Test; import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * @author: 86199 * @date: 2023/6/4 10:42 * @description: 演示如何通过反射获取类的结构信息 */ public class ReflectionUtils { public static void main(String[] args) throws ClassNotFoundException { ReflectionUtils reflectionUtils = new ReflectionUtils(); System.out.println("========================api_01()======================="); reflectionUtils.api_01(); System.out.println("========================api_02()======================="); reflectionUtils.api_02(); } //第一组方法API:java.lang.Class @Test public void api_01() throws ClassNotFoundException { //得到Class对象 Class<?> personCls = Class.forName("com.hspedu.reflection.Person"); //1. getName:获取全类名 System.out.println(personCls.getName());//com.hspedu.reflection.Person //2. getSimpleName:获取简单类名 System.out.println(personCls.getSimpleName());//Person //3. getFields:获取所有Public修饰的属性,包含本类及其父类(不仅仅是直接父类) for (Field field : personCls.getFields()) { System.out.println("本类及父类的公有属性"+ field.getName()); } //4. getDeclaredFields:获取本类中的所有属性,不包括父类 for (Field declaredField : personCls.getDeclaredFields()) { System.out.println("本类中所有属性" + declaredField.getName()); } //5. getMethods:获取所有public修饰的方法,包含本类及其父类的(不仅仅是直接父类) for (Method method : personCls.getMethods()) { System.out.println("本类及其父类的公有方法 = " + method); } //6. getDeclaredMethods:获取本类中所有方法,不包括父类 for (Method declaredMethod : personCls.getDeclaredMethods()) { System.out.println("本类的方法 = " + declaredMethod); } //7. getConstructors:获取所有public修饰的构造器,不包括父类 for (Constructor<?> constructor : personCls.getConstructors()) { System.out.println("本类的public构造器 = " + constructor); } //8. getDeclaredConstructors:获取本类中的所有构造器,不包括父类,构造器不能被继承 for (Constructor<?> declaredConstructor : personCls.getDeclaredConstructors()) { System.out.println("本类的所有构造器 = " + declaredConstructor); } //9. getPackage:以Package形式返回包信息 System.out.println(personCls.getPackage());//package com.hspedu.refl