Java反射033.通过反射获取类的结构信息3.1java.lang.Class类
- getName:获取全类名
- getSimpleName:获取简单类名
- getFields:获取所有public修饰的属性,包含本类以及父类的
- getDeclaredFields:获取本类中所有属性
- getMethods:获取所有public修饰的方法,包含本类以及父类的
- getDeclaredMethods:获取本类中所有方法
- getConstructors:获取本类中所有public修饰的构造器
- getDeclaredConstructors:获取本类中所有构造器
- getPackage:以Package形式返回包信息
- getSuperClass:以Class形式返回父类信息
- getInterfaces:以Class形式返回接口信息
- getAnnotations:以Annotation形式返回注解信息
例子1:
package li.reflection;import org.junit.jupiter.api.Test;import java.lang.annotation.Annotation;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;//演示如何通过反射获取类的结构信息public class ReflectionUtils {public static void main(String[] args) {}//第一组方法 API@Testpublic void api_01() throws ClassNotFoundException {//得到Class对象Class<?> personCls = Class.forName("li.reflection.Person");//1. getName:获取全类名System.out.println(personCls.getName());//li.reflection.Person//2. getSimpleName:获取简单类名System.out.println(personCls.getSimpleName());//Person//3. getFields:获取所有public修饰的属性,包含本类以及父类的Field[] fields = personCls.getFields();for (Field field : fields) {//增强forSystem.out.println("本类以及父类的属性=" + field.getName());//本类以及父类的属性=name//本类以及父类的属性=hobby}//4. getDeclaredFields:获取本类中所有属性Field[] declaredFields = personCls.getDeclaredFields();for (Field declaredField : declaredFields) {System.out.println("本类中所有属性=" + declaredField.getName());}//5. getMethods:获取所有public修饰的方法,包含本类以及父类的//这里的父类包括的不只是直接父类,包括object的共有方法也会获取Method[] methods = personCls.getMethods();for (Method method : methods) {System.out.println("获取包含本类以及父类的所有public修饰的方法=" + method.getName());}//6. getDeclaredMethods:获取本类中所有方法Method[] declaredMethods = personCls.getDeclaredMethods();for (Method declaredMethod : declaredMethods) {System.out.println("获取本类中所有方法" + declaredMethod.getName());}//7. getConstructors:获取本类中所有public修饰的构造器Constructor<?>[] constructors = personCls.getConstructors();for (Constructor<?> constructor : constructors) {System.out.println("本类的public构造器=" + constructor.getName());}//8. getDeclaredConstructors:获取本类中所有构造器Constructor<?>[] declaredConstructors = personCls.getDeclaredConstructors();for (Constructor<?> declaredConstructor : declaredConstructors) {System.out.println("获取本类中所有构造器=" + declaredConstructor.getName());//这里只是输出名字}//9. getPackage:以Package形式返回包信息System.out.println(personCls.getPackage());//package li.reflection//10. getSuperClass:以Class形式返回父类信息Class<?> superclass = personCls.getSuperclass();System.out.println("父类的Class对象=" + superclass);//class li.reflection.A//11. getInterfaces:以Class形式返回接口信息Class<?>[] interfaces = personCls.getInterfaces();for (Class<?> anInterface : interfaces) {System.out.println("接口信息" + anInterface);//接口信息interface li.reflection.IA//接口信息interface li.reflection.IB}//12. getAnnotations:以Annotation形式返回注解信息Annotation[] annotations = personCls.getAnnotations();for (Annotation annotation : annotations) {System.out.println("注解信息" +annotation);//注解信息@java.lang.Deprecated()}}}class A {public String hobby;public void hi() {}public A() {}}interface IA {}interface IB {}@Deprecatedclass Person extends A implements IA, IB {//属性public String name;protected int age;String job;private double sal;public Person() {}public Person(String name) {this.name = name;}//私有private Person(String name, int age) {}//方法public void m1() {}protected void m2() {}void m3() {}private void m4() {}}
文章插图
文章插图
3.2java.lang.reflect.Field类
- getModifiers:以int形式返回修饰符
[说明:默认修饰符default是0,public 是1 ,private是2,protected是4 , static是8,final是16]
如果有叠加的修饰符,如 public static ...,那么返回的int值就是相加的结果 , public(1)+static(8)=9
- getType:以Class形式返回类型,即返回该属性对应的类的Class对象
- getName:返回属性名
推荐阅读
- Javascript 手写 LRU 算法
- Java 读写锁 ReadWriteLock 原理与应用场景详解
- 为什么阿里Java开发手册不推荐使用Timestamp
- 大华海康NVR录像JAVA下载及WEB播放
- Java三大框架 JAVA三大框架详细介绍
- 足底反射区疼痛是为什么
- Java找不到工作怎么办 java找不到工作怎么办
- java解析xml字符串 java怎么解析xml最简单
- java如何捕获异常 如何捕获完整的异常信息
- 什么是JavaBean 什么是java