• java.lang.reflect.Field


    java.lang.reflect.Field

    一、Field类是什么
      Field是一个类,位于java.lang.reflect包下。
      在Java反射中 Field类描述的是 类的属性信息,通俗来讲 有一个类如下:

     1 package com.testReflect;
     2 public class FieldDemo {
     3     public int num1 = 1;
     4     protected int num2 = 2;
     5     int num3 = 3;
     6     private int num4 = 4;
     7     
     8     public String s1 = "a";
     9     protected String s2 = "b";
    10     String s3 = "c";
    11     private String s4 = "d";
    12 }

      在Java反射中FieldDemo类中的属性: num1、num2、num3、num4 都是Field类的实例,这个Field类的实例描述了属性的全部信息。(包括:属性名称、属性类型、属性修饰符、属性注解 等等)

    二、如何获取Field类对象
      一共有4种方法,全部都在Class类中:
        - getFields(): 获取类中public类型的属性
        - getField(String name): 获取类特定的方法,name参数指定了属性的名称
        - getDeclaredFields(): 获取类中所有的属性(public、protected、default、private),但不包括继承的属性。
        - getDeclaredField(String name): 获取类特定的方法,name参数指定了属性的名称

    三、Field类中常用的方法
      对于类中的属性,我们常用的操作:获取属性的值、修改属性的值。

     1 package com.testReflect;
     2 
     3 import java.lang.reflect.Field;
     4 import java.lang.reflect.Modifier;
     5 
     6 public class FieldTest {
     7     public static void main(String[] args) throws Exception {
     8         //使用反射第一步:获取操作类FieldDemo所对应的Class对象
     9         Class<?> cls = Class.forName("com.testReflect.FieldDemo");
    10         //使用FieldDemo类的class对象生成 实例
    11         Object obj = cls.newInstance();
    12                 
    13         //通过Class类中getField(String name): 获取类特定的方法,name参数指定了属性的名称
    14         Field field = cls.getField("num1");        
    15 
    16         //拿到了Field类的实例后就可以调用其中的方法了
    17         
    18         //方法:getModifiers()  以整数形式返回由此 Field 对象表示的字段的 Java 语言修饰符
    19         System.out.println("修饰符:  " + Modifier.toString(field.getModifiers()));
    20 
    21         //方法:getType()  返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型
    22         System.out.println("类型:  "+field.getType());
    23         
    24         //方法:get(Object obj) 返回指定对象obj上此 Field 表示的字段的值
    25         System.out.println("属性值:  "+field.get(obj));
    26         
    27         //方法: set(Object obj, Object value)  将指定对象变量上此 Field 对象表示的字段设置为指定的新值
    28         field.set(obj, 55);
    29         System.out.println("修改属性值后 --> get(Object obj):  "+field.get(obj));
    30     }
    31 }
  • 相关阅读:
    spring Bean的生命周期
    java合并两个有序数组的算法(抛砖引玉)
    Spring 中解析 URL参数的几种方式
    联合索引和单个索引使用注意事项
    Java中同一个类中不同的synchronized方法是否可以并发执行?
    简析JVM GC的根搜索算法
    spring rest 请求怎样添加Basic Auth请求頭
    spring boot 排除个别配置类的代码
    使用非对称算法RSA实现加解密和使用签名算法SHA1WithRSA、MD5withRSA生成签名以及验签
    Redis中如何发现并优化big key?
  • 原文地址:https://www.cnblogs.com/xinhuaxuan/p/6019510.html
Copyright © 2020-2023  润新知