日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java通过反射访问成员变量

發布時間:2025/3/12 java 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java通过反射访问成员变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通過下列任意一個方法訪問成員變量時將返回 Field 類型的對象或數組。

getFields()getField(String name)getDeclaredFields()getDeclaredField(String name)

上述方法返回的 Field 對象代表一個成員變量。例如,要訪問一個名稱為 price 的成員變量,示例代碼如下:

object.getDeciaredField("price");

Field類的常用方法

方法名稱說明
getName()獲得該成員變量的名稱
getType()獲取表示該成員變量的 Class 對象
get(Object obj)獲得指定對象 obj 中成員變量的值,返回值為 Object 類型
set(Object obj, Object value)將指定對象 obj 中成員變量的值設置為 value
getlnt(0bject obj)獲得指定對象 obj 中成員類型為 int 的成員變量的值
setlnt(0bject obj, int i)將指定對象 obj 中成員變量的值設置為 i
setFloat(Object obj, float f)將指定對象 obj 中成員變量的值設置為 f
getBoolean(Object obj)獲得指定對象 obj 中成員類型為 boolean 的成員變量的值
setBoolean(Object obj, boolean b)將指定對象 obj 中成員變量的值設置為 b
getFloat(Object obj)獲得指定對象 obj 中成員類型為 float 的成員變量的值
setAccessible(boolean flag)此方法可以設置是否忽略權限直接訪問 private 等私有權限的成員變量
getModifiers()獲得可以解析出該方法所采用修飾符的整數

示例如何調用 Field 類的方法獲取動態類中各個成員的信息。

1 . 首先創建一個 Book 類,在該類中依次聲明一個 String、int、float 和 boolean 類型的成員,并設置不同的訪問作用域。Book 類最終的代碼如下:

public class Book {String name;public int id;private float price;protected boolean isLoan; }

2)編寫測試類 Test,在該類的 main() 方法中通過反射訪問 Book 類中的所有成員,并將該成員的名稱和類型信息輸出到控制臺。

Test 類的代碼如下:

import java.lang.reflect.Constructor; import java.lang.reflect.Field; public class Test {public static void main(String[] args) {Book book = new Book();// 獲取動態類BookClass class1 = book.getClass();// 獲取Book類的所有成員Field[] declaredFields = class1.getDeclaredFields();// 遍歷所有的成員for(int i = 0;i < declaredFields.length;i++) { // 獲取類中的成員變量Field field = declaredFields[i];System.out.println("成員名稱為:" + field.getName());Class fieldType = field.getType();System.out.println("成員類型為:" + fieldType);boolean isTurn = true;while(isTurn) {try { // 如果該成員變量的訪問權限為private,則拋出異常isTurn = false;System.out.println("修改前成員的值為:" + field.get(book));// 判斷成員類型是否為intif(fieldType.equals(int.class)) {System.out.println("利用setInt()方法修改成員的值");field.setInt(book, 100);} else if(fieldType.equals(float.class)) { // 判斷成員變量類型是否為floatSystem.out.println("利用setFloat()方法修改成員的值");field.setFloat(book, 29.815f);} else if(fieldType.equals(boolean.class)) { // 判斷成員變量是否為booleanSystem.out.println("利用setBoolean()方法修改成員的值");field.setBoolean(book, true);} else {System.out.println("利用set()方法修改成員的值");field.set(book, "Java編程");}System.out.println("修改后成員的值為:" + field.get(book));} catch (Exception e) {System.out.println("在設置成員變量值時拋出異常,下面執行setAccessible()方法");field.setAccessible(true);isTurn = true;}}System.out.println("=============================\n");}} }

3 . 運行測試類 Test,程序將會依次動態訪問 Book 類中的所有成員。訪問 name 成員的運行效果如下所示:

成員名稱為:name 成員類型為:class java.lang.String 修改前成員的值為:null 利用set()方法修改成員的值 修改后成員的值為:Java編程 =============================

訪問 id 成員的運行效果如下所示:

成員名稱為:id 成員類型為:int 修改前成員的值為:0 利用setInt()方法修改成員的值 修改后成員的值為:100 =============================

訪問 price 成員的運行效果如下所示:

成員名稱為:price 成員類型為:float 在設置成員變量值時拋出異常,下面執行setAccessible()方法 修改前成員的值為:0.0 利用setFloat()方法修改成員的值 修改后成員的值為:29.815 =============================

訪問 isLoan 成員的運行效果如下所示:

成員名稱為:isLoan 成員類型為:boolean 修改前成員的值為:false 利用setBoolean()方法修改成員的值 修改后成員的值為:true =============================

總結

以上是生活随笔為你收集整理的Java通过反射访问成员变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。