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()

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...