Java反射(四)反射获取类的结构信息

简介: 介绍了Constructor Method Field Class的API

四.反射获取类的结构信息

1.第一组:java.lang.Class类

1.getName:获取全类名2.getSimpleName:获取简单类名3.getFields:获取所有publicf修饰的属性,包含本类以及父类的4.getDeclaredFields:获取本类中所有属性5.getMethods:获取所有public修饰的方法,包含本类以及父类的6.getDeclaredMethods:获取本类中所有方法7.getConstructors:获取所有public修饰的构造器,包含本类8.getDeclaredConstructors:获取本类中所有构造器9.getPackage:以Package]形式返回包信息10.getSuperClass:以Class形式返回父类信息11.getInterfaces:以Class[]形式返回接口信息12.getAnnotations:以Annotation[]形式返回注解信息

/**

* @author LeeZhi

* @version 1.0

* 演示如何通过反射获取类的结构信息

*/

publicclassReflectionUtils {

   publicstaticvoidmain(String[] args) {

   }

   //第一组方法API

   @Test

   publicvoidapi_01() throwsClassNotFoundException {

       /**

        * 1.getName:获取全类名

        * 2.getSimpleName:获取简单类名

        * 3.getFields:获取所有publicf修饰的属性,包含本类以及父类的

        * 4.getDeclaredFields:获取本类中所有属性

        * 5.getMethods:获取所有public修饰的方法,包含本类以及父类的

        * 6.getDeclaredMethods:获取本类中所有方法

        * 7.getConstructors:获取本类所有public修饰的构造器

        * 8.getDeclaredConstructors:获取本类中所有构造器

        * 9.getPackage:以Package]形式返回包信息

        * 10.getSuperClass:以Class形式返回父类信息

        * 11.getInterfaces:以Class[]形式返回接口信息

        * 12.getAnnotations:以Annotation[]形式返回注解信息

        */

       //1.得到Class对象

       Class<?>personCls=Class.forName("com.gbx.reflection.Person");

       System.out.println(personCls.getName());

       System.out.println(personCls.getSimpleName());

       Field[] fields=personCls.getFields();

       for (Fieldfield : fields) {

           System.out.println("本类以及父类的属性:"+field.getName());

       }

       Field[] declaredFields=personCls.getDeclaredFields();

       for (FielddeclaredField : declaredFields) {

           System.out.println("本类所有属性:"+declaredField.getName());

       }

       Method[] methods=personCls.getMethods();

       for (Methodmethod : methods) {

           System.out.println("本类及父类的方法:"+method.getName());

       }

       Method[] declaredMethods=personCls.getDeclaredMethods();

       for (MethoddeclaredMethod : declaredMethods) {

           System.out.println("本类所有方法:"+declaredMethod.getName());

       }

       Constructor<?>[] constructors=personCls.getConstructors();

       for (Constructor<?>constructor : constructors) {

           System.out.println("本类的构造器:"+constructor.getName());

       }

       Constructor<?>[] declaredConstructors=personCls.getDeclaredConstructors();

       for (Constructor<?>declaredConstructor : declaredConstructors) {

           System.out.println("本类中所有构造器:"+declaredConstructor.getName());

       }

       System.out.println(personCls.getPackage());

       Class<?>superclass=personCls.getSuperclass();

       System.out.println("父类的class对象"+superclass);

       Class<?>[] interfaces=personCls.getInterfaces();

       for (Class<?>anInterface : interfaces) {

           System.out.println("接口信息:"+anInterface);

       }

       Annotation[] annotations=personCls.getAnnotations();

       for (Annotationannotation : annotations) {

           System.out.println("注解信息:"+annotation);

       }

   }

}

classA{

   publicStringhobby;

   publicvoidhi(){

   }

   publicA() {

   }

}

interfaceIA{

}

interfaceIB{

}

classPersonextendsAimplementsIA,IB{

   //属性

   publicStringname;

   protectedintage;

   Stringjob;

   privatedoublesal;

   publicPerson() {

   }

   publicPerson(Stringname) {

       this.name=name;

   }

   privatePerson(Stringname,intage){

   }

   //方法

   publicvoidm1(){

   }

   protectedvoidm2(){

   }

   voidm3(){

   }

   privatevoidm4(){

   }

}

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

1.getModifiers:以int形式返回修饰符[说明:默认修饰符是0,public是1,private是2,protected是4,static是8,final是16]   public(1)+static (8)=92.getType:以Class形式返回类型3.getName:返回属性名

   @Test

   publicvoidapi_02() throwsClassNotFoundException {

       //1.得到Class对象

       Class<?>personCls=Class.forName("com.gbx.reflection.Person");

       Field[] declaredFields=personCls.getDeclaredFields();

       for (FielddeclaredField : declaredFields) {

           System.out.println("本类所有属性:"+declaredField.getName()

                   +"该属性的修饰值:"+declaredField.getModifiers()

                   +"该属性的类型"+declaredField.getType());

       }

   }

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

1.getModifiers:以int形式返回修饰符[说明:默认修饰符是0,public是1,private是2,protected是4,static是8,final是16]2.getReturnType:以Classj形式获取返回类型3.getName:返回方法名4.getParameterTypes:以Class[]返回参数类型数组

Method[] declaredMethods=personCls.getDeclaredMethods();
for (MethoddeclaredMethod : declaredMethods) {
System.out.println("本类所有方法:"+declaredMethod.getName()
+"该方法的访问修饰符"+declaredMethod.getModifiers()
+"该方法返回类型"+declaredMethod.getReturnType());
//输出当前这个方法的形参数组情况Class<?>[] parameterTypes=declaredMethod.getParameterTypes();
for (Class<?>parameterType : parameterTypes) {
System.out.println("该方法形参类型:"+parameterType);
            }
        }


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

1.getModifiers:以int形式返回修饰符2.getName:返回构造器名(全类名)3.getParameterTypes:以Class[]返回参数类型数组

Constructor<?>[] declaredConstructors=personCls.getDeclaredConstructors();
for (Constructor<?>declaredConstructor : declaredConstructors) {
System.out.println("本类中所有构造器:"+declaredConstructor.getName());
Class<?>[] parameterTypes=declaredConstructor.getParameterTypes();
for (Class<?>parameterType : parameterTypes) {
System.out.println("该构造器的形参类型:"+parameterType);
            }
        }
目录
打赏
0
0
0
0
9
分享
相关文章
Java 密封类:精细化控制继承关系
Java 密封类:精细化控制继承关系
139 83
Java 基础类从入门到精通实操指南
这份指南专注于**Java 17+**的新特性和基础类库的现代化用法,涵盖开发环境配置、数据类型增强(如文本块)、字符串与集合处理进阶、异常改进(如密封类)、IO操作及实战案例。通过具体代码示例,如CSV数据分析工具,帮助开发者掌握高效编程技巧。同时提供性能优化建议和常用第三方库推荐,适合从入门到精通的Java学习者。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
130 35
|
11天前
|
Java API中Math类功能全景扫描
在实际使用时,这些方法的精确度和性能得到了良好的优化。当处理复杂数学运算或高精度计算时,`Math`类通常是足够的。然而,对于非常精细或特殊的数学运算,可能需要考虑使用 `java.math`包中的 `BigDecimal`类或其他专业的数学库。
47 11
深入理解Java虚拟机--类文件结构
本内容介绍了Java虚拟机与Class文件的关系及其内部结构。Class文件是一种与语言无关的二进制格式,包含JVM指令集、符号表等信息。无论使用何种语言,只要能生成符合规范的Class文件,即可在JVM上运行。文章详细解析了Class文件的组成,包括魔数、版本号、常量池、访问标志、类索引、字段表、方法表和属性表等,并说明其在Java编译与运行过程中的作用。
Java 期末考试救急必备涵盖绝大多数核心考点及五大类经典代码助你过关
本文为Java期末考试复习指南,涵盖基础语法、面向对象编程、异常处理、文件操作、数据库连接五大核心考点,提供详细解析与实用代码示例,助力快速掌握重点,高效备考,轻松应对考试。
27 0
java的反射与注解
java的反射与注解
65 0
Java反射读取注解信息
Java反射读取注解信息
97 0
Java中的反射(通过反射获取类的结构、invoke方法、获取注解)
Java中的反射(通过反射获取类的结构、invoke方法、获取注解)
Java的第十六篇文章——枚举、反射和注解(后期再学一遍)
Java的第十六篇文章——枚举、反射和注解(后期再学一遍)
AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等