當前位置:首頁 » 編程語言 » java反射獲取變數

java反射獲取變數

發布時間: 2024-08-13 03:08:56

java中反射是什麼

JAVA中反射是動態獲取信息以及動態調用對象方法的一種反射機制。

Java反射就是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意方法和屬性;並且能改變它的屬性。而這也是Java被視為動態語言的一個關鍵性質。

Java反射的功能是在運行時判斷任意一個對象所屬的類,在運行時構造任意一個類的對象,在運行時判斷任意一個類所具有的成員變數和方法,在運行時調用任意一個對象的方法,生成動態代理。

(1)java反射獲取變數擴展閱讀:

JAVA中反射實例:

1、Class superClass=clazz.getSuperclass();//獲取父類。

System.out.println("getSuperclass:"+superClass)。

2、Class[] interfaces=clazz.getInterfaces();//獲取實現介面。

System.out.println("getInterfaces:"+interfaces.length)。

3、Constructor[] cons=clazz.getConstructors();//構造方法。

System.out.println("getConstructors:"+cons.length)。

參考資料來源:網路: JAVA反射機制

⑵ java 中怎麼獲得以該字元串命名的變數

實現以上場景,在java中有多種方法,最直接方式的是通過反射獲取,但是反射有較大的性能損耗,一般不建議用在運行階段反射,大多開源框架是在初始化的時候通過反射來實例化。

1、通過反射獲取

packagetest;

importjava.lang.reflect.Field;

publicclassDemo2{
publicstaticvoidmain(String[]args),IllegalAccessException,NoSuchFieldException,SecurityException{
Stringop="strA";
Testt=newTest();

///通過類的位元組碼得到該類中聲明的所有屬性,無論私有或公有
Fieldstrs=Test.class.getDeclaredField(op);
//設置訪問許可權(這點對於有過android開發經驗的可以說很熟悉)
strs.setAccessible(true);
//得到私有的變數值
String[]as=(String[])strs.get(t);


System.out.println(as.length);

}


}

classTest{
privateString[]strA=newString[]{"a","b","c"};
privateString[]strB=newString[]{"d","e","f"};
}


2、通過map設置獲取

packagetest;

importjava.util.HashMap;
importjava.util.Map;

publicclassDemo2{
publicstaticvoidmain(String[]args),IllegalAccessException,NoSuchFieldException,SecurityException{

Map<String,String[]>map=newHashMap<String,String[]>();
map.put("strA",newString[]{"a","str","c"});
map.put("strB",newString[]{"d","e","f"});
Stringop="strB";

Stringresult=map.get(op)[0];//"d"

}
}

以上兩種方法雖然都能實現需求,但是在實際情況中還是得看具體的情況來界定選擇。

⑶ 如何利用java反射順序的從一個java類中得到其中定義的成員變數名或者方法

for (int i = 0; i < fields.length; i++) {
Field field = fields[i];

String fieldName = field.getName();
System.out.println("name====="+fieldName);
String firstLetter = fieldName.substring(0, 1).toUpperCase();
// 獲得和屬性對應的getXXX()方法的名字
String getMethodName = "get" + firstLetter + fieldName.substring(1);

// 獲得和屬性對應的getXXX()方法
Method getMethod = classType.getMethod(getMethodName, new Class[]{});

// 調用原對象的getXXX()方法
Object value = getMethod.invoke(object, new Object[]{});
System.out.println("value===="+value);
}

⑷ java中如何通過反射獲取類的屬性

簡單的方法如下:
Class<?> cls=Class.forName(className);////////////////////////通過類的名稱反射類
Object obj=cls.newInstance();//////////////////////對象實例化
Field field=cls.getField(fieldName);/////這個對應的是屬性
fieldValue=field.get(obj);////這個就是屬性的值

⑸ java怎麼通過反射獲得所有的屬性的值

Class<?> clazz = ref.getClass();
Method method=clazz.getMethod("getLength");
System.out.println(method.invoke(ref));

熱點內容
如何給監控加訪問密碼 發布:2024-11-25 16:45:13 瀏覽:600
國外安卓音樂播放器哪個好 發布:2024-11-25 16:35:58 瀏覽:142
我的世界伺服器增加粒子 發布:2024-11-25 16:28:29 瀏覽:717
帶內核的安卓x86是什麼意思 發布:2024-11-25 16:27:01 瀏覽:272
php了解 發布:2024-11-25 16:16:26 瀏覽:933
個人搭建伺服器要錢不 發布:2024-11-25 16:06:56 瀏覽:832
伺服器磁碟滿了怎麼辦 發布:2024-11-25 16:06:14 瀏覽:19
python代碼文本分類 發布:2024-11-25 16:05:22 瀏覽:224
加密cf備份 發布:2024-11-25 16:05:21 瀏覽:442
java加鎖 發布:2024-11-25 15:50:26 瀏覽:397