news 2026/6/23 8:56:50

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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[]返回参数类型数组

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(){} }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 20:41:56

2026届秋招AI岗位狂潮:大厂招聘激增10倍,这份成功上岸攻略不容错过!

2025年夏末&#xff0c;一场针对2026届毕业生的AI人才争夺战比往年提前了至少一个月打响。阿里巴巴、腾讯、字节跳动、百度等头部企业纷纷抛出规模空前的招聘计划&#xff0c;其中AI相关岗位占比普遍超过60%&#xff0c;部分业务线甚至高达80%至90%。 一场前所未有的秋招正在拉…

作者头像 李华
网站建设 2026/6/22 23:53:29

1、掌握 Linux 脚本编程:从基础到高级应用

掌握 Linux 脚本编程:从基础到高级应用 1. 技术要求与 Linux 外壳类型 在开始学习脚本编程之前,了解技术要求和不同类型的 Linux 外壳是很重要的。技术要求通常涉及到对一些基本 Linux 命令的熟悉,如 ls 、 cd 和 which 等。而 Linux 有多种外壳,常见的有 Sh 外壳…

作者头像 李华
网站建设 2026/6/23 6:16:45

3、Bash脚本编写:基础与进阶

Bash脚本编写:基础与进阶 1. 带参数运行脚本 在Bash脚本中,我们可以带参数运行脚本。即便脚本未使用这些参数,它们也会被默默忽略。例如运行 hello1.sh 脚本并传入一个参数: $ hello1.sh fred脚本仍会正常运行且不报错,输出保持不变,依然是 Hello World 。 Bash…

作者头像 李华
网站建设 2026/6/23 8:37:55

C#教程(小部分)

C#变量变量是存储数据值的容器。在 C# 中&#xff0c;有不同类型的变量&#xff08;用不同的关键字定义&#xff09;&#xff0c;例如:int - 存储整数&#xff08;整数&#xff09;&#xff0c;不带小数&#xff0c;如123或-123double - 存储带小数的浮点数&#xff0c;例如19.…

作者头像 李华
网站建设 2026/6/23 11:39:45

HNU 编译系统 作业1

题目1请从编译功能的角度简要说明 JDK 与 JRE 的主要区别。 如果我们只有一个.java 源文件&#xff0c;要运行该程序&#xff0c;最少需要安装的是 JDK 还是 JRE&#xff1f;请说明理由&#xff1b; 如果我们只有一个已经编译好的 .class 字节码文件&#xff0c;最少需要安装的…

作者头像 李华
网站建设 2026/6/23 19:47:23

vue基于Springboot框架的写字楼危险品管理信息系统的设计和实现

目录 已开发项目效果实现截图开发技术系统开发工具&#xff1a; 核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&am…

作者头像 李华