java反射獲取變數
⑴ 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));