Java--反射--获取类的结构信息

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

      package com.model.reflection;
      
      import java.lang.annotation.Annotation;
      import java.lang.reflect.Constructor;
      import java.lang.reflect.Field;
      import java.lang.reflect.Method;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/6/29 15:24
       * 演示获取类的结构信息
       */
      public class ReflectionDemo04 {
          /**
           * 第一组API:
           * 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.getlnterfaces:以Class[1形式返回接口信息
           * 12.getAnnotations:以Annotation[]形式返回注解信息
           * */
      
          public static void main(String[] args) throws ClassNotFoundException {
      //        1.获取Class类对象
              Class<?> aClass = Class.forName("com.model.reflection.Person");
      //                * 1. getName:获取全类名
              System.out.println(aClass.getName());
      //                * 2. getSimpleName:获取简单类名
              System.out.println(aClass.getSimpleName());
      //                * 3. getFields:获取所有public修饰的属性,包含本类以及父类的
              Field[] fields = aClass.getFields();
              for (Field field : fields) {
                  System.out.println(field);
              }
      //                * 4. getDeclaredFields:获取本类中所有属性
              Field[] declaredFields = aClass.getDeclaredFields();
              for (Field field : declaredFields) {
                  System.out.println(field);
              }
      //                * 5. getMethods:获取所有public修饰的方法,包含本类以及父类的
              Method[] methods = aClass.getMethods();
              for (Method method : methods) {
                  System.out.println(method);
              }
      //                * 6. getDeclaredMethods:获取本类中所有方法
              Method[] declaredMethods = aClass.getDeclaredMethods();
              for (Method declaredMethod : declaredMethods) {
                  System.out.println(declaredMethod);
              }
      //                * 7. getConstructors:获取所有public修饰的构造器,包含本类
              Constructor<?>[] constructors = aClass.getConstructors();
              for (Constructor<?> constructor : constructors) {
                  System.out.println(constructor);
              }
      //                * 8. getDeclaredConstructors:获取本类中所有构造器
              Constructor<?>[] declaredConstructors = aClass.getDeclaredConstructors();
              for (Constructor<?> declaredConstructor : declaredConstructors) {
                  System.out.println(declaredConstructor);
              }
      //                * 9. getPackage:以Package形式返回包信息
              Package aPackage = aClass.getPackage();
              System.out.println(aPackage);
      //                * 10.getSuperClass:以Class形式返回父类信息
              System.out.println(aClass.getSuperclass());
      //                * 11.getInterfaces:以Class[1]形式返回接口信息
              Class<?>[] interfaces = aClass.getInterfaces();
              for (Class<?> anInterface : interfaces) {
                  System.out.println(anInterface);
              }
      //                * 12.getAnnotations:以Annotation[]形式返回注解信息
              Annotation[] annotations = aClass.getAnnotations();
              for (Annotation annotation : annotations) {
                  System.out.println(annotation);
              }
      
      
          }
      }
      class Person{
          public String name;
          protected int age;
          private double sal;
          public void m1(){
              System.out.println("m1");
          };
          protected void m2(){
              System.out.println("m2");
          };
          private void m3(){
              System.out.println("m3");
          };
      
      }
  2. 第二组 java.lang.reflect.Field类
  3. 第三组

  4. 第四组:
  5. package com.model.reflection;
    
    
    import org.junit.Test;
    
    import java.lang.annotation.Annotation;
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.lang.reflect.TypeVariable;
    
    /**
     * @Description:测试类
     * @Author: 张紫韩
     * @Crete 2021/6/29 15:24
     * 演示获取类的结构信息
     */
    public class ReflectionDemo04 {
        /**
         * 第一组API:
         * 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[1形式返回接口信息
         * 12.getAnnotations:以Annotation[]形式返回注解信息
         * */
    
    //    1.API调用
        @Test
        public void test_API() throws ClassNotFoundException {
    //        1.获取Class类对象
            Class<?> aClass = Class.forName("com.model.reflection.Person");
    //                * 1. getName:获取全类名
            System.out.println(aClass.getName());
    //                * 2. getSimpleName:获取简单类名
            System.out.println(aClass.getSimpleName());
    //                * 3. getFields:获取所有public修饰的属性,包含本类以及父类的
            Field[] fields = aClass.getFields();
            for (Field field : fields) {
                System.out.println(field);
            }
    //                * 4. getDeclaredFields:获取本类中所有属性
            Field[] declaredFields = aClass.getDeclaredFields();
            for (Field field : declaredFields) {
                System.out.println(field.getName());
            }
    //                * 5. getMethods:获取所有public修饰的方法,包含本类以及父类的
            Method[] methods = aClass.getMethods();
            for (Method method : methods) {
                System.out.println(method);
            }
    //                * 6. getDeclaredMethods:获取本类中所有方法
            Method[] declaredMethods = aClass.getDeclaredMethods();
            for (Method declaredMethod : declaredMethods) {
                System.out.println(declaredMethod);
            }
    //                * 7. getConstructors:获取所有public修饰的构造器
            Constructor<?>[] constructors = aClass.getConstructors();
            for (Constructor<?> constructor : constructors) {
                System.out.println(constructor);
            }
    //                * 8. getDeclaredConstructors:获取本类中所有构造器
            Constructor<?>[] declaredConstructors = aClass.getDeclaredConstructors();
            for (Constructor<?> declaredConstructor : declaredConstructors) {
                System.out.println(declaredConstructor);
            }
    //                * 9. getPackage:以Package形式返回包信息
            Package aPackage = aClass.getPackage();
            System.out.println(aPackage);
    //                * 10.getSuperClass:以Class形式返回父类信息
            System.out.println(aClass.getSuperclass());
    //                * 11.getInterfaces:以Class[1]形式返回接口信息
            Class<?>[] interfaces = aClass.getInterfaces();
            for (Class<?> anInterface : interfaces) {
                System.out.println(anInterface);
            }
    //                * 12.getAnnotations:以Annotation[]形式返回注解信息
            Annotation[] annotations = aClass.getAnnotations();
            for (Annotation annotation : annotations) {
                System.out.println(annotation);
            }
    
    
    
    
        }
    
    //    2.成员变量Field属性
        @Test
        public void  test_Field() throws ClassNotFoundException {
    
            Class<?> aClass = Class.forName("com.model.reflection.Person");
            Field[] fields = aClass.getFields(); //获取本类中(包括父类)所有的public修饰的成员变量
            for (Field field : fields) {
                System.out.println(field.getName()); //成员变量名
                //成员变量的访问修饰符的值,
                //说明:默认修饰符是0,public 是1, private是2,protected是4,static是8, final是16
                System.out.println(field.getModifiers());
            }
            System.out.println("****************************");
            Field[] declaredFields = aClass.getDeclaredFields();
            for (Field declaredField : declaredFields) {
                System.out.println("成员变量的名字"+declaredField.getName()); //获取本类中所有的成员变量
                //获取本类中成员变量的访问属性,
                //有两个修饰符修饰 ,则修饰符的值相加
                System.out.println("成员变量的访问修饰的值"+declaredField.getModifiers());
                System.out.println("成员变量的类型"+declaredField.getType());
            }
    
    
        }
    //    3.成员方法Method属性
        @Test
        public void test_Method() throws ClassNotFoundException {
    
            Class<?> aClass = Class.forName("com.model.reflection.Person");
            Method[] methods = aClass.getDeclaredMethods();
            for (Method method : methods) {
                System.out.println("成员方法的名字"+method.getName());
                System.out.println("成员方法的修饰符的值"+method.getModifiers());
                System.out.println("成员方法的返回值类型"+method.getReturnType());
    
                //成员方法的参数
                TypeVariable<? extends Class<?>>[] typeParameters = aClass.getTypeParameters();
                for (TypeVariable<? extends Class<?>> typeParameter : typeParameters) {
                    System.out.println(typeParameter);
                }
            }
        }
    
    //    4.构造器Constructor属性
        @Test
        public void test_Constructor() throws ClassNotFoundException {
            Class<?> aClass = Class.forName("com.model.reflection.Person");
            Constructor<?>[] declaredConstructors = aClass.getDeclaredConstructors();
            for (Constructor<?> declaredConstructor : declaredConstructors) {
    
                System.out.println("构造器的全类名:"+declaredConstructor.getName());
                System.out.println("构造器的修饰符的值:"+declaredConstructor.getModifiers());
                Class<?>[] parameterTypes = declaredConstructor.getParameterTypes();
                for (Class<?> parameterType : parameterTypes) {
                    System.out.println("构造器的参数:"+parameterType.getName());
                }
    
    
            }
        }
    
    
    }
    
    
    class Person{
        public Person() {
        }
    
        public Person(String name, int age, double sal) {
            this.name = name;
            this.age = age;
            this.sal = sal;
        }
    
        public String name;
        protected int age;
        private double sal;
        public void m1(){
            System.out.println("m1");
        };
        protected void m2(){
            System.out.println("m2");
        };
        private void m3(){
            System.out.println("m3");
        };
    
    }
posted @ 2021-06-29 17:17  张紫韩  阅读(77)  评论(0编辑  收藏  举报