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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM