通过反射获取运行时类的完整结构:Field、Method、Constructor、Superclass、Interface、Annotation
⭕️新建一个Person类:包含private的属性和public的属性,对应的构造器,对应的get和set方法,定义了一个属性name对应的私有构造器,重写toString方法,写了一个public的show方法,私有的showNation方法,代码如下
public class Person {private String name;public int age;public Person(String name, int age) {this.name = name;this.age = age;}private Person(String name) {//定义一个私有构造器,来体现反射this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person() {}public void show(){System.out.println("我是show方法");}private String showNation(String nation){System.out.println("国籍是:"+nation);return nation;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}
⭕️全部的Field
@Test
public void test1(){Class clazz = Person.class;//获取属性结构//getFields():获取当前运行时类及其父类中声明为public访问权限的属性Field[] fields = clazz.getFields();for(Object obj:fields){System.out.println(obj);}//getDeclaredFields():获取当前运行时类自己定义的全部属性(不包含父类的)Field[] fields2 = clazz.getDeclaredFields();for(Object obj:fields2){System.out.println(obj);}}
⭕️Field方法中
//权限修饰符 数据类型 变量名
@Test
public void test2(){Class clazz = Person.class;Field[] fields = clazz.getDeclaredFields();for(Field f:fields){//1.权限修饰符int modifiers = f.getModifiers();System.out.print(Modifier.toString(modifiers)+"\t");//2.数据类型Class type = f.getType();System.out.print(type.getName()+"\t");//3.变量名String name = f.getName();System.out.print(name);System.out.println();//打印完一次后换行方便查看结果}
}
⭕️全部的方法
@Test
public void test1(){Class clazz = Person.class;//获取当前运行时类及其父类中声明为public访问权限的方法Method[] methods = clazz.getMethods();for (Method m:methods){System.out.println(m);}//获取当前运行时类中声明的所有方法(不包含父类中的方法)Method[] methods2 = clazz.getDeclaredMethods();for (Method m:methods2){System.out.println(m);}
}
⭕️Method类中
注:这里后面的都是大同小异,就不用代码举例了…
⭕️全部的构造器
public Constructor[] getConstructors()
返回此 Class 对象所表示的类的所有public构造方法。
public Constructor[] getDeclaredConstructors()
返回此 Class 对象表示的类声明的所有构造方法。
⭕️Constructor类中:
⭕️父类
public Class getSuperclass()
返回表示此 Class 所表示的实体(类、接口、基本类型)的父类的 Class。
⭕️接口
public Class[] getInterfaces()
确定此对象所表示的类或接口实现的接口。
⭕️Annotation相关
⭕️泛型相关
⭕️包相关
下一篇:Java垃圾回收器