Java反射04:获取运行时类的属性结构及其内部结构
创始人
2024-04-02 08:22:19
0

文章目录

        • 获取运行时类的属性结构及其内部结构
          • 新建测试类
          • 1.获取每一个Field(属性)
          • 2.获取运行时类的方法结构
          • 3.获取运行时类的构造器
          • 4.获取当前运行时所继承的父类和接口
          • 5.获取当前运行时类的注解、包、泛型

获取运行时类的属性结构及其内部结构

通过反射获取运行时类的完整结构:Field、Method、Constructor、Superclass、Interface、Annotation

  • 实现的全部接口 、所继承的父类 、全部的构造器 、全部的方法 、全部的Field
新建测试类

⭕️新建一个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 +'}';}
}
1.获取每一个Field(属性)

⭕️全部的Field

  • public Field[] getFields() :
    获取当前运行时类及其父类中声明为public访问权限的属性
  • public Field[] getDeclaredFields() :
    获取当前运行时类自己定义的全部属性(不包含父类的)
@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方法中

  • public int getModifiers() 以整数形式返回此Field的修饰符
    • 返回的整数形式对应的是修饰符类型,可以用Modifiers类下的toString方法来转换为实际类型表达
  • public Class getType() 得到Field的属性类型
  • public String getName() 返回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();//打印完一次后换行方便查看结果}
}
2.获取运行时类的方法结构

⭕️全部的方法

  • public Method[] getDeclaredMethods():获取当前运行时类中声明的所有方法(不包含父类中的方法)
  • public Method[] getMethods() :获取当前运行时类及其父类中声明为public访问权限的方法
@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 Class getReturnType()取得全部的返回值
  • public Class[] getParameterTypes()取得全部的参数
  • public int getModifiers()取得修饰符
  • public Class[] getExceptionTypes()取得异常信息

注:这里后面的都是大同小异,就不用代码举例了…

3.获取运行时类的构造器

⭕️全部的构造器

  • public Constructor[] getConstructors()

    返回此 Class 对象所表示的类的所有public构造方法。

  • public Constructor[] getDeclaredConstructors()

    返回此 Class 对象表示的类声明的所有构造方法。

⭕️Constructor类中:

  • 取得修饰符: public int getModifiers();
  • 取得方法名称: public String getName();
  • 取得参数的类型:public Class[] getParameterTypes();
4.获取当前运行时所继承的父类和接口

⭕️父类

  • public Class getSuperclass()

    返回表示此 Class 所表示的实体(类、接口、基本类型)的父类的 Class。

⭕️接口

  • public Class[] getInterfaces()

    确定此对象所表示的类或接口实现的接口。

5.获取当前运行时类的注解、包、泛型

⭕️Annotation相关

  • get Annotation(Class annotationClass)
  • getDeclaredAnnotations()

⭕️泛型相关

  • 获取父类泛型类型:Type getGenericSuperclass()
  • 泛型类型:ParameterizedType
  • 获取实际的泛型类型参数数组:getActualTypeArguments()

⭕️包相关

  • Package getPackage()

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...