導航:首頁 > 編程語言 > java反射獲取變數值

java反射獲取變數值

發布時間:2022-12-12 12:30:07

Ⅰ 用java的反射機制怎麼獲取一個類中裡面方法中局部變數

publicclassPerson{
privateStringname;
privateintage;

publicStringgetName(){
returnname;
}

publicvoidsetName(Stringname){
this.name=name;
}

publicintgetAge(){
returnage;
}

publicvoidsetAge(intage){
this.age=age;
}

publicstaticvoidmain(String[]args){
try{
Classc=Class.forName(Person.class.getName());
//獲取類的屬性
Field[]fields=c.getDeclaredFields();
for(inti=0;i<fields.length;i++){
System.out.println("類的屬性有:"+Modifier.toString(fields[i].getModifiers())+""+fields[i].getType()+""+fields[i].getName());
}
//獲取類的方法
Method[]methods=c.getMethods();
for(intj=0;j<methods.length;j++){
System.out.println("類的方法有:"+Modifier.toString(methods[j].getModifiers())+""+methods[j].getReturnType()+""+methods[j].getName());
}
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
}
}
//運行結果如下:
類的屬性有:privateclassjava.lang.Stringname
類的屬性有:privateintage
類的方法有:publicstaticvoidmain
類的方法有:publicclassjava.lang.StringgetName
類的方法有:publicvoidsetName
類的方法有:publicvoidsetAge
類的方法有:publicintgetAge
類的方法有:publicfinalvoidwait
類的方法有:publicfinalvoidwait
類的方法有:publicfinalnativevoidwait
類的方法有:publicbooleanequals
類的方法有:publicclassjava.lang.StringtoString
類的方法有:publicnativeinthashCode
類的方法有:publicfinalnativeclassjava.lang.ClassgetClass
類的方法有:publicfinalnativevoidnotify
類的方法有:

Ⅱ java 通過反射怎麼獲取方法中參數值

方法中的參數是形參,形參只有類型沒有值,只有調用方法的時候參數才有值,通過反射獲取方法是獲取的方法的定義,方法定義入參怎麼會有參數值呢,只有參數類型啊。

Ⅲ java如何利用反射機製得到一個類中為數組類型的成員變數的值

寫了個例子,請仔細查看代碼,具體過程需要你自己對照java API 再研究,


先定義了一個普通的學生類,如下:

publicclassStudent{
privateintid;
privateStringname;
privateintage;
privateString[]aiHao;
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicString[]getAiHao(){
returnaiHao;
}
publicvoidsetAiHao(String[]aiHao){
this.aiHao=aiHao;
}
}

對學生類進行反射

publicclassTest3{
publicstaticvoidmain(String[]args){
Students=newStudent();
s.setId(1);
s.setName("張三");
s.setAge(23);
s.setAiHao(newString[]{"足球","籃球","上網"});
try{
//獲取所有的變數
Field[]fields=Student.class.getDeclaredFields();
//循環處理變數
for(Fieldf:fields){
f.setAccessible(true);
Objectvalue=f.get(s);//取變數的值
System.out.print("變數名稱為:"+f.getName());
if(value.getClass().isArray()){//判斷是否是數組
Object[]arr=(Object[])value;//裝換成數組
System.out.println(",變數值等於:"+Arrays.toString(arr));
//這里還可以做額外處理,判斷數組的類型如下面注釋的代碼
/*
for(Objecta:arr){
System.out.println("參數類型"+a.getClass().getName());
//同樣運用反射的機製做額外處理
}
*/
}else{
//非數組類型,普通處理
System.out.println(",變數值等於:"+value);
}
f.setAccessible(false);
}
}catch(Exceptione){
e.printStackTrace();
}
}
}

Ⅳ java 通過反射怎麼獲取方法中參數值

public <T> T invokeMethod(String beanName, String methodName,
Class<?>[] paramTypes, Object... parameters) {
try {
Object bean = ApplicationContextHolder.getBean(beanName);
Class<? extends Object> beanClass = bean.getClass();
// Method method = beanClass.getDeclaredMethod(methodName,
// paramTypes);
// Method m0 = ClassUtils.getPublicMethod(beanClass, beanName,
// paramTypes);

Method method = null;
Method[] ms = beanClass.getMethods();
for (Method m : ms) {
String mName = m.getName();
if (StringUtils.equals(methodName, mName)) {
boolean isThis = true;
Class<?>[] pt = m.getParameterTypes();
if (paramTypes.length == pt.length) {
int plength = paramTypes.length;
if (plength == 0) {
isThis = true;
} else {
for (int i = 0; i < plength; i++) {
boolean ff = pt[i]
.isAssignableFrom(paramTypes[i]);
if (!ff) {
isThis = false;
break;
}
}
}
} else {
isThis = false;
}
if (isThis) {
method = m;
break;
}
}
}
if (method == null) {
throw new NoSuchMethodException(beanName + "." + methodName);
}

Object obj = null;
if (parameters == null || parameters.length < 1) {
obj = method.invoke(bean);
} else {
obj = method.invoke(bean, parameters);
}
T out = (T) obj;
return out;
} catch (SecurityException e) {
log.error(DataTypeConstant.MOD_CODE_SUBTYPE2, "", e);
} catch (IllegalArgumentException e) {
log.error(DataTypeConstant.MOD_CODE_SUBTYPE2, "", e);
} catch (IllegalAccessException e) {
log.error(DataTypeConstant.MOD_CODE_SUBTYPE2, "", e);
} catch (InvocationTargetException e) {
log.error(DataTypeConstant.MOD_CODE_SUBTYPE2, "", e);
} catch (NoSuchMethodException e) {
log.error(DataTypeConstant.MOD_CODE_SUBTYPE2, "", e);
}
return null;
}

上面是一個完整的通過bean的名稱和方法名稱來調用該bean下的一個方法的方法。應該對你有所幫助!

Ⅳ java 通過反射怎麼獲取方法中參數值

答案是沒法獲取。
首先反射獲取的是類、屬性、或者方法的定義,就拿方法來說,方法的定義是什麼呢?
方法的定義包括:方法名,方法的參數類型列表,方法的返回值類型。
方法的參數類型列表包括什麼呢?
包括每個參數的順序和參數類型。
參數值是什麼?是在這個方法被調用的時候傳入的參數叫做參數值。反射呢,是獲取的它的定義,並不牽扯調用,所以說沒法獲取。

Ⅵ 反射--靜態成員變數的值獲取

public class Student{

    private static int age;

}

   Field field = Student.class.getDeclaredField("age");

    field.setAccessible(true);

    field.get(null);     普通屬性獲取值 需要傳入對象,但是靜態屬性 不需要傳入具體對象,傳

null 也可以獲取 該欄位的值。

Ⅶ 大佬告訴我java 反射如何獲取成員變數的值

下例演示了通過反射獲取 Test 類對象 t 的 iVal, strVal 成員變數的值:

importjava.lang.reflect.Field;

classTest{

privateintiVal;

privateStringstrVal;

publicTest(intiVal,StringstrVal){
this.iVal=iVal;
this.strVal=strVal;
}
}

publicclassApp{

publicstaticvoidmain(String[]args){

//創建一個Test對象
Testt=newTest(123,"Hello");

//獲取對象t的Class
Class<?>tt=t.getClass();

try{

//獲取Test類的iVal欄位Field
Fieldfield=tt.getDeclaredField("iVal");

//設置可訪問
field.setAccessible(true);

//獲取iVal的值
intval=field.getInt(t);

System.out.println(val);


FieldstrValField=tt.getDeclaredField("strVal");
strValField.setAccessible(true);
StringstrVal=(String)strValField.get(t);
System.out.println(strVal);

}catch(NoSuchFieldException|SecurityExceptione){
e.printStackTrace();
}catch(IllegalArgumentExceptione){
e.printStackTrace();
}catch(IllegalAccessExceptione){
e.printStackTrace();
}

}
}

Ⅷ java 通過反射怎麼獲取方法中參數值

Class<?>clazz=object.getClass();
Method[]ms=clazz.getMethods();
for(inti=0;i<ms.length;i++){
System.out.println("方法名:"+ms[i].getName());
Type[]t=ms[i].getGenericParameterTypes();//獲取參數類型,至於你說的獲取參數值,我沒明白
}

Ⅸ java 通過反射怎麼獲取方法中參數值

id只是形參,調用函數的時候傳進去的才是實參
也就是你使用這個函數傳進去的具體的值,這是你自己傳進去的

閱讀全文

與java反射獲取變數值相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:758
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:383
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:779
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:151
伊克塞爾文檔怎麼進行加密 瀏覽:893
app轉賬是什麼 瀏覽:163