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);
            }
        }
目录
相关文章
|
3天前
|
运维 Java
Java版HIS系统 云HIS系统 云HIS源码 结构简洁、代码规范易阅读
云HIS系统分为两个大的系统,一个是基层卫生健康云综合管理系统,另一个是基层卫生健康云业务系统。基层卫生健康云综合管理系统由运营商、开发商和监管机构使用,用来进行运营管理、运维管理和综合监管。基层卫生健康云业务系统由基层医院使用,用来支撑医院各类业务运转。
21 5
|
1天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
22 3
|
4天前
|
监控 Java 开发者
掌握 Java 反射和动态代理
【4月更文挑战第19天】Java反射和动态代理提供强大功能和灵活性。反射允许运行时检查和操作类,获取类信息、动态调用方法,但可能带来性能损失和降低代码可读性。动态代理则用于创建代理对象,实现透明性和横切关注点分离,常用于日志、权限检查等。两者结合能实现更复杂功能。掌握这些技术能提升代码的灵活性和可扩展性,但也需注意性能和可读性。通过学习和实践,能更好地构建高效软件系统。
|
6天前
|
Java 编译器
Java Character 类
4月更文挑战第13天
|
7天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
10天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
12 0
|
10天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
15 0
|
10天前
|
Java
代码的魔法师:Java反射工厂模式详解
代码的魔法师:Java反射工厂模式详解
23 0
|
12天前
|
安全 Java
append在Java中是哪个类下的方法
append在Java中是哪个类下的方法
21 9
|
7月前
|
存储 SQL Java
Java反射读取注解信息
Java反射读取注解信息
46 0

热门文章

最新文章