Java_通过反射获取类的结构信息

第一组:java.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\[\] 形式返回注解信息

第二组:java.lang.reflect.Field类

1.getModifiners:以int形式返回修饰符

2.getType:以Class形式返回类型

3.getName:返回属性名

第三组:java.lang.reflect.Method类

1.getModifiers:以int形式返回修饰符

说明:默认修饰符是0,public是1,private是2,protected是4,static是8,final是16

2.getReturnType:以Class形式返回类型

3.getName:返回属性名

4.getParameterTypes:以Class\[\]返回参数类型数组

第四组:java.lang.reflect.Constructor类

1.getModifiers:以int形式返回修饰符

2.getName:返回构造器名(全类名)

3.getParameterTypes:以Class\[\]返回参数类型数组

java 复制代码
ackage com.reflection.ReflectionUtils;

import java.io.Serializable;
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) throws Exception{
        new ReflectionUtils().API_01();
        new ReflectionUtils().API_02();
        new ReflectionUtils().API_03();
        new ReflectionUtils().API_04();
    }
    //第一组
    public void API_01()throws Exception{
//        第一组:java.lang.Class类
        //得到class对象
        Class<?> personClass = Class.forName("com.reflection.ReflectionUtils.Person");

//        1.getName:获取全类名
        System.out.println(personClass.getName());//com.reflection.ReflectionUtils.Person
//        2.getSimpleName:获取简单类名
        System.out.println(personClass.getSimpleName());//Person
//        3.getFields:获取所有public修饰的属性,包含本类以及父类的
        Field[] fields = personClass.getFields();
        for (Field f :fields) {
            System.out.println(f.getName());//name hobby 因为只有他俩是public修饰的
        }
//        4.getDeclaredFields:获取本类中所有属性
        Field[] declaredFields = personClass.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            System.out.println(declaredField.getName());//name age job sal
        }
//        5.getMethods:获取所有public修饰的方法,包含本类以及父类的
        Method[] methods = personClass.getMethods();
        for (Method method : methods) {
            System.out.println(method);
        }
//        6.getDeclaredMethods:获取本类中所有方法
        Method[] declaredMethods = personClass.getDeclaredMethods();
        for (Method declaredMethod : declaredMethods) {
            System.out.println(declaredMethod.getName());
        }
//        7.getConstructors: 获取本类所有public修饰的构造器
        Constructor<?>[] constructors = personClass.getConstructors();
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor.getName());
        }
//        8.getDeclaredConstructors:获取本类中所有构造器
        Constructor<?>[] declaredConstructors = personClass.getDeclaredConstructors();
        for (Constructor<?> declaredConstructor : declaredConstructors) {
            System.out.println(declaredConstructor.getName());
        }
//        9.getPackage:以Package形式返回 包信息
        System.out.println(personClass.getPackage());
//        10.getSuperClass:以Class形式返回父类信息
        Class<?> superclass = personClass.getSuperclass();
        System.out.println(superclass);
//        11.getInterfaces:以Class[]形式返回接口信息
        Class<?>[] interfaces = personClass.getInterfaces();
        for (Class<?> anInterface : interfaces) {
            System.out.println(anInterface.getName());
        }
//        12.getAnnotations:以Annotation[] 形式返回注解信息
        Annotation[] annotations = personClass.getAnnotations();
        for (Annotation annotation : annotations) {
            System.out.println(annotation.toString());
        }
    }

    //第二组
    public void API_02()throws Exception {
//        第二组:java.lang.reflect.Field类
        //得到class对象
        Class<?> personClass = Class.forName("com.reflection.ReflectionUtils.Person");
//        1.getModifiners:以int形式返回修饰符,默认修饰符是0,public是1,private是2,protected是4,static是8,final是16
//        2.getType:以Class形式返回类型
//        3.getName:返回属性名
        //获取本类中所有属性
        Field[] declaredFields = personClass.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            System.out.println(declaredField.getName() + "该属性的修饰符值为" + declaredField.getModifiers()
             + " 该属性的类型为" + declaredField.getType());//name age job sal 1 4 0 2
        }
//        name该属性的修饰符值为1 该属性的类型为class java.lang.String
//        age该属性的修饰符值为4 该属性的类型为int
//        job该属性的修饰符值为0 该属性的类型为class java.lang.String
//        sal该属性的修饰符值为2 该属性的类型为double
    }

    //第三组
    public void API_03()throws Exception {
//        第三组:java.lang.reflect.Field类
        //得到class对象
        Class<?> personClass = Class.forName("com.reflection.ReflectionUtils.Person");
//        1.getModifiers:以int形式返回修饰符 说明:默认修饰符是0,public是1,private是2,protected是4,static是8,final是16
//        2.getReturnType:以Class形式返回类型
//        3.getName:返回属性名
//        4.getParameterTypes:以Class[]返回参数类型数组
        //getDeclaredMethods:获取本类中所有方法
        Method[] declaredMethods = personClass.getDeclaredMethods();
        for (Method declaredMethod : declaredMethods) {
            System.out.println(declaredMethod.getName() + "该方法访问修饰符对应值为" + declaredMethod.getModifiers()
             + " 该方法的返回类型为" + declaredMethod.getReturnType() + " 该方法的属性名" + declaredMethod.getName());
            //输出当前方法形参数组情况
            Class<?>[] parameterTypes = declaredMethod.getParameterTypes();
            for (Class<?> parameterType : parameterTypes) {
                System.out.println(" 该方法形参类型" + parameterType.getName());
            }
        }
//        m1该方法访问修饰符对应值为1 该方法的返回类型为void 该方法的属性名m1
//        m2该方法访问修饰符对应值为4 该方法的返回类型为int 该方法的属性名m2
//        该方法形参类型java.lang.String
//                该方法形参类型int
//        该方法形参类型java.lang.String
//        m3该方法访问修饰符对应值为0 该方法的返回类型为void 该方法的属性名m3
//        m4该方法访问修饰符对应值为2 该方法的返回类型为void 该方法的属性名m4
    }
    //第四组
    public void API_04()throws Exception {
//        第四组:java.lang.reflect.Constructor类
        //得到class对象
        Class<?> personClass = Class.forName("com.reflection.ReflectionUtils.Person");
//        1.getModifiers:以int形式返回修饰符
//        2.getName:返回构造器名(全类名)
//        3.getParameterTypes:以Class[]返回参数类型数组
        //获取本类中所有构造器
        Constructor<?>[] declaredConstructors = personClass.getDeclaredConstructors();
        for (Constructor<?> declaredConstructor : declaredConstructors) {
            System.out.println(declaredConstructor.getName());
            Class<?>[] parameterTypes = declaredConstructor.getParameterTypes();
            for (Class<?> parameterType : parameterTypes) {
                System.out.println(" 该构造器形参类型为" + parameterType);
            }
        }
//        该构造器形参类型为class java.lang.String
//        该构造器形参类型为int
//        该构造器形参类型为class java.lang.String
//        该构造器形参类型为double
    }
}
class A{
    public String hobby;

    public A() {
    }
}
@Deprecated
class Person extends A implements Serializable {
    //属性
    public String name;
    protected int age;
    String job;
    private double sal;

    //构造器
    private Person(String name, int age, String job, double sal) {
        this.name = name;
        this.age = age;
        this.job = job;
        this.sal = sal;
    }

    public Person() {
    }

    //方法
    public void m1(){}
    protected int m2(String name,int age,String job){
        return 1;
    }
    void m3(){}
    private void m4(){}
}
相关推荐
蛋蛋的就会顺顺的9 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
需要8269 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡10 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
死磕音视频10 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
伯恩bourne11 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_12 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
省钱兄--zs12 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲12 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog13 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
用户212968352616813 小时前
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
java·llm