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(){}
}
相关推荐
我不是疯子是傻子10 分钟前
串口通信数据帧粘包拆包再进化:基于 Qt 的滑动窗口与 CRC 校验实战
开发语言·qt
程序员老陆19 分钟前
Qt中实现窗口真全屏(覆盖Windows任务栏)
开发语言·windows·qt
xiaohaiAIgeo19 分钟前
【2026年】HG/T 20656-2024化工暖通空调设计规范:新版标准的变化与影响
java·前端·javascript·科普知识
小强库计算机毕业设计34 分钟前
基于 Spring Boot + Vue3 的校园管理系统
java·spring boot·后端·项目实战·管理系统·技术分享·校园管理系统实战
霸道流氓气质44 分钟前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式
怪奇云呼军1 小时前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
编程令我快乐1 小时前
maven部分构建参数讲解
java·maven
ZC跨境爬虫1 小时前
LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)
java·python·leetcode
路溪非溪1 小时前
Python语言的执行流程总结
开发语言·python
民乐团扒谱机1 小时前
【超详解】量子克拉美罗下界QCRB:时延估计精度极限推导+MATLAB多场景绘图实战
开发语言·机器学习·matlab·量子力学·qcrb