day44-反射03

Java反射033.通过反射获取类的结构信息3.1java.lang.Class类

  1. getName:获取全类名
  2. getSimpleName:获取简单类名
  3. getFields:获取所有public修饰的属性,包含本类以及父类的
  4. getDeclaredFields:获取本类中所有属性
  5. getMethods:获取所有public修饰的方法,包含本类以及父类的
  6. getDeclaredMethods:获取本类中所有方法
  7. getConstructors:获取本类中所有public修饰的构造器
  8. getDeclaredConstructors:获取本类中所有构造器
  9. getPackage:以Package形式返回包信息
  10. getSuperClass:以Class形式返回父类信息
  11. getInterfaces:以Class形式返回接口信息
  12. 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() {}}
day44-反射03

文章插图

day44-反射03

文章插图
3.2java.lang.reflect.Field类
  1. getModifiers:以int形式返回修饰符
    [说明:默认修饰符default是0,public 是1 ,private是2,protected是4 , static是8,final是16]
    如果有叠加的修饰符,如 public static ...,那么返回的int值就是相加的结果 , public(1)+static(8)=9
  2. getType:以Class形式返回类型,即返回该属性对应的类的Class对象
  3. getName:返回属性名

    推荐阅读