zoukankan      html  css  js  c++  java
  • Java 反射机制:(七)获取运行时类的属性结构

    一、获取属性结构

      1、getFields()

        getFields():获取当前运行时类及其父类中声明为public访问权限的属性

        Demo:

     1     @Test
     2     public void test1() {
     3 
     4         Class clazz = Person.class;
     5 
     6         //获取属性结构
     7         //getFields():获取当前运行时类及其父类中声明为public访问权限的属性
     8         Field[] fields = clazz.getFields();
     9         for (Field f : fields) {
    10             System.out.println(f);
    11         }
    12     }

        运行结果:

        

      2、getDeclaredFields()

        getDeclaredFields():获取当前运行时类中声明的所有属性。(不包含父类中声明的属性)

        Demo:

     1     @Test
     2     public void test2() {
     3 
     4         Class clazz = Person.class;
     5 
     6         //获取属性结构
     7         //getDeclaredFields():获取当前运行时类中声明的所有属性。(不包含父类中声明的属性)
     8         Field[] declaredFields = clazz.getDeclaredFields();
     9         for(Field f : declaredFields){
    10             System.out.println(f);
    11         }
    12     }

         运行结果:

         

      3、getField(String name)

        getField(String name):根据字段名来获取运行时类中 public  修饰的成员变量

        Demo:

     1     @Test
     2     public void test3() throws NoSuchFieldException {
     3 
     4         Class clazz = Person.class;
     5 
     6         //获取属性结构
     7         //getField():根据字段名来获取当前运行时类中 public 修饰的成员变量
     8         Field field = clazz.getField("id");
     9         System.out.println(field);
    10     }

      4、getDeclaredField(String name)

        getDeclaredField(String name):根据字段名来获取当前运行时类中的成员变量,忽略修饰符;

        Demo:

     1     @Test
     2     public void test4() throws NoSuchFieldException {
     3 
     4         Class clazz = Person.class;
     5 
     6         //获取属性结构
     7         //getField():根据字段名来获取获取当前运行时类中 public 修饰的成员变量
     8         Field field = clazz.getDeclaredField("name");
     9         System.out.println(field);
    10     }

    二、获取成员变量的信息

        一个类中的成员变量可以有修饰符,数据类型和变量名等信息。这些都可以获取:

        常用方法:

    public int getModifiers() 以整数形式返回此Field的修饰符
    
    public Class<?> getType() 得到Field的属性类型
    
    public String getName() 返回Field的名称。

        Demo:

     1     @Test
     2     public void test1(){
     3         Class clazz = Person.class;
     4         Field[] declaredFields = clazz.getDeclaredFields();
     5         for(Field f : declaredFields){
     6             //1.权限修饰符
     7             int modifier = f.getModifiers();
     8             System.out.print(Modifier.toString(modifier) + "	");
     9 
    10             //2.数据类型
    11             Class type = f.getType();
    12             System.out.print(type.getName() + "	");
    13 
    14             //3.变量名
    15             String fName = f.getName();
    16             System.out.print(fName);
    17 
    18             System.out.println();
    19         }
    20     }

         运行结果:

          

        (1)修饰符

          获取的修饰符返回值是一个 int,而不是期望的字符串,这是因为在 Modifier 类中声明了对应的常量值。

          

          调用 Modifier 类的 toString() 方法就可以获取对应值的修饰符。

        (2)数据类型

          调用属性的 getType() 就可以获取数据类型,而它也是一个 Class 对象。

        

    三、

  • 相关阅读:
    使用HttpURLConnection
    使用HttpURLConnection
    HTTP基本工作原理
    HTTP基本工作原理
    【杭电】[2022]海选女主角
    【杭电】[2022]海选女主角
    【吐槽】这是第200篇博文
    【吐槽】这是第200篇博文
    【NYOJ】[8]一种排序
    【NYOJ】[8]一种排序
  • 原文地址:https://www.cnblogs.com/niujifei/p/14883136.html
Copyright © 2011-2022 走看看