java 27 - 4 反射之 通過反射獲取成員變量並使用


類Field: 提供有關類或接口的單個字段的信息,以及對它的動態訪問權限。

 

A:獲得類的成員變量 數組:

  1、getFields(公共類的)

  2、getDeclaredFields(所有類型的)

B:獲得類的單個成員變量:

  1、getField (公共類的)

  2、getDeclaredField (所有類型的)

 

  A.1:獲得類的公共成員變量:

1         //獲取類的字節碼文件對象    
2         Class c = Class.forName("zl_Relfect_01.Person");
3         
4         //獲得該對象的公共成員變量
5         Field[] f = c.getFields();
6         //遍歷
7         for(Field fie : f){
8             System.out.println(fie);
9         }

 

 A.2:獲得類的所有成員變量:

1         //獲取類的字節碼文件對象    
2         Class c = Class.forName("zl_Relfect_01.Person");
3       //獲取該類的所有成員變量
4         Field[] f = c.getDeclaredFields();
5         for(Field fie : f){
6             System.out.println(fie);
7         }    

 

 B.1:獲得單個公共成員變量:

1         //獲取類的字節碼文件對象    
2         Class c = Class.forName("zl_Relfect_01.Person");
3         //獲取單個公共的成員變量
4         Field f = c.getField("address");
5         System.out.println(f);

 

 B.2:獲得單個所有類型的成員變量:

1         //獲取類的字節碼文件對象    
2         Class c = Class.forName("zl_Relfect_01.Person");
3 //        獲取單個成員變量(所有類型)
4         Field f = c.getDeclaredField("name");
5         System.out.println(f);

 

 通過反射獲取成員變量並使用

 1      //獲取類的字節碼文件對象
 2         Class c = Class.forName("zl_Relfect_01.Person");    
 3         //通過無參構造創建對象
 4         Constructor con = c.getConstructor();
 5         Object obj = con.newInstance();
 6         
 7     
 8         //獲取私有成員變量name,並對它進行賦值  9         //首先獲取私有成員變量name
10         Field newname = c.getDeclaredField("name");
11         //成員變量name是私有的,所以得先取消語言訪問檢查  public void setAccessible(boolean flag)
12         newname.setAccessible(true);
13         //set(Object obj,Object value):將指定對象變量上此 Field 對象表示的字段設置為指定的新值。
14         //給obj里面的newname賦值為張三
15         newname.set(obj, "張三");
16         System.out.println(obj);//Person [name=張三, age=0, address=null]
17 
18         
19         //獲取默認類型成員變量age,並對它進行賦值    
20         //獲取age變量,並賦值
21         Field newage = c.getDeclaredField("age");
22         //取消語言訪問檢查
23         newage.setAccessible(true);
24         //給age賦值
25         newage.set(obj, 13);
26         System.out.println(obj);
27         
28         
29         //獲取公共成員變量address,並對它賦值    
30         //獲取address對象,並賦值
31         Field newaddress = c.getDeclaredField("address");
32         newaddress.set(obj, "家鄉");
33         System.out.println(obj);

 


免責聲明!

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



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