【Java高级】利用反射机制获取类的所有信息

1.相关准备

一个User类足以。

package com.sdnu.demo;

/**
 * 用户
 *
 * @author Beyong
 * @date 2024/03/23 19:48
 **/
public class User {
    String name;
    int age;
    public User() {
    }
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void method1(int id) {
        System.out.println("方法一:" + id);
    }
}

测试类

package com.sdnu.demo;

import java.lang.reflect.Modifier;

/**
 * 反射测试
 *
 * @author Beyong
 * @date 2024/03/23 19:47
 **/
public class Test {
    public static void main(String[] args){
        try{
            Class user = Class.forName("com.sdnu.demo.User");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2.导航图

我们知道反射机制能帮助 我们操作字节码文件,所以如下将总结一些相关的方法去一一获取类的相关信息。
在这里插入图片描述

3. 相关的方法

注意小标题与方法的对应 。

----------------------------------------------类------------------------------------------------------

1 类的修饰符

int modifierNumber = user.getModifiers();
System.out.println(Modifier.toString(modifierNumber));

在这里插入图片描述

对象的getModifiers(),会返回一个数字,该数字代表一个修饰符,我们可以将该数字作为参数传给Modifier.toString(),这个方法会返回修饰符的字符串形式。

2 类名

这个没啥好说的。

-----------------------------------------------属性-----------------------------------------------------

方法作用
getField​(String name)返回 字段对象,该对象反映此 类对象表示的类或接口的指定公共成员字段。
getFields()返回一个包含 字段对象的数组, 字段对象反映此 类对象所表示的类或接口的所有可访问公共成员字段。
getDeclaredField​(String name)返回 字段对象,该对象反映此 类对象表示的类或接口的指定声明字段。
getDeclaredField​s()返回 字段对象的数组, 字段对象反映由此 类对象表示的类或接口声明的所有字段。
Field[] fields = user.getFields();
for(Field field : fields) {
  System.out.println(field);
}

在这里插入图片描述

Field[] fields = user.getDeclaredFields();
for(Field field : fields) {
  System.out.println(field);
}

在这里插入图片描述

System.out.println(user.getField("name"));

在这里插入图片描述

System.out.println(user.getDeclaredField("age"));

在这里插入图片描述

3. 属性修饰符 4. 属性类型 5.属性名字

Field[] fields = user.getDeclaredFields();
            for(Field field : fields) {
                System.out.println(field);//整个属性
                System.out.println(Modifier.toString(field.getModifiers()));//属性修饰符
                System.out.println(field.getName());//属性名字
                System.out.println(field.getType());//属性类型
                System.out.println(field.getType().getSimpleName());//属性类型简化
            }

在这里插入图片描述

----------------------------------------------构造方法---------------------------------------------

  Constructor[] declaredConstructors = user.getDeclaredConstructors();
  for(Constructor constructor : declaredConstructors) {
    System.out.println(constructor);
  }

在这里插入图片描述

6.构造方法修饰符 7.构造方法名字

for(Constructor constructor : declaredConstructors) {
 	System.out.println(constructor);
 	System.out.println(Modifier.toString(constructor.getModifiers()));
 	System.out.println(constructor.getName());
 }

在这里插入图片描述

8 构造方法参数类型 9.构造方法参数名

for(Constructor constructor : declaredConstructors) {
                Parameter[] parameters = constructor.getParameters();
                for(Parameter parameter : parameters) {
                    System.out.println("----------" + parameter);
                    System.out.println(parameter.getType());
                    System.out.println(parameter.getName());
                }
            }

在这里插入图片描述

----------------------------------------------普通方法---------------------------------------------

10普通方法修饰符 11普通方法返回值类型 12普通方法名 13普通方法参数的修饰符 14普通方法名

Method[] declaredMethods = user.getDeclaredMethods();
            for(Method method : declaredMethods) {
                System.out.println(method);
                System.out.println(Modifier.toString(method.getModifiers()));
                System.out.println(method.getReturnType());
                System.out.println(method.getName());
                Parameter[] parameters2 = method.getParameters();
                for(Parameter parameter : parameters2) {
                    System.out.println(parameter);
                    System.out.println(parameter.getType());
                    System.out.println(parameter.getName());
                }
            }

普通方法与构造方法类似,只是名字由constructor换成method。而且普通方法多了返回值类型。

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值