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);
            }
        }
目录
相关文章
|
16天前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
69 4
|
21天前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
118 5
|
24天前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
89 1
|
24天前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
149 2
|
24天前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
102 1
|
IDE Java 编译器
java的反射与注解
java的反射与注解
93 0
|
存储 SQL Java
Java反射读取注解信息
Java反射读取注解信息
114 0
|
JSON 安全 Java
|
安全 Java API
Java中的反射(通过反射获取类的结构、invoke方法、获取注解)
Java中的反射(通过反射获取类的结构、invoke方法、获取注解)
|
前端开发 Java 编译器
Java的第十六篇文章——枚举、反射和注解(后期再学一遍)
Java的第十六篇文章——枚举、反射和注解(后期再学一遍)