Java 反射機制中 getMethod()和getDeclaredField()區別
今天在程序中用到java反射機制時,遇到的問題記錄一下:我當時遇到的問題是,我用反射getMethod()調用類方法時,發生NoSuchMethodException異常,后來上網發現getMethod()調用公共方法,不能反射調用私有方法,后來找到getDeclaredField()能夠訪問本類中定義的所有方法。后來用這個方法解決了我遇到的問題。我查了java api文檔,其中詳細說明如下:
Method getDeclaredMethod(String name, Class… parameterTypes)
返回一個 Method 對象,該對象反映此 Class 對象所表示的類或接口的指定已聲明方法。
Method[] getDeclaredMethods()
返回 Method 對象的一個數組,這些對象反映此 Class 對象表示的類或接口聲明的所有方法,包括公共、保護、默認(包)訪問和私有方法,但不包括繼承的方法。
Method getMethod(String name, Class… parameterTypes)
返回一個 Method 對象,它反映此 Class 對象所表示的類或接口的指定公共成員方法。
Method[] getMethods()
返回一個包含某些 Method 對象的數組,這些對象反映此 Class 對象所表示的類或接口(包括那些由該類或接口聲明的以及從超類和超接口繼承的那些的類或接口)的公共 member 方法。
getDeclaredField(String name)
返回一個 Field 對象,該對象反映此 Class 對象所表示的類或接口的指定已聲明字段。
Field[] getDeclaredFields()
返回 Field 對象的一個數組,這些對象反映此 Class 對象所表示的類或接口所聲明的所有字段,包括公共、保護、默認(包)訪問和私有字段,但不包括繼承的字段
反射獲取對象中的變量
1
2
3
4
5
|
A a=
new
A();
Field field=A.
class
.getDeclaredField(
"m"
);
//根據變量名m獲得字段
field.setAccessible(
true
);
//設置字段可訪問,即暴力反射
String m=(String)field.get(a);
//在那個對象上獲取此字段的值
System.out.println(m);
|