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

java反射獲取變數

發布時間:2023-03-13 14:22:19

『壹』 大佬告訴我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的反射機制怎麼獲取一個類中裡面方法中局部變數

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類中得到其中定義的成員變數名或者方法

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如何利用反射機製得到一個類中為數組類型的成員變數的值

寫了個例子,請仔細查看代碼,具體過程需要你自己對照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中,怎麼利用反射獲取一個方法

java的反射用法:(異常請自行處理)

①找到類:Class cl = Class.forName("java.util.Date");

②創建對象(要求這個類中含有空參數的構造方法):Object obj = cl.newInstence();

③根據名稱和參數找方法:Method method1 = cl.getMethod("getTime");//如果沒有參數不用寫第二個參數如果有參數的如:Method method2 = cl.getMethod("setTime",long.class);

④在某個對象上面執行方法,Object result = method1.invoke(obj);//如果有參數的Object result = method2.invoke(obj,21317362721);

執行的方如果有返回值,將返回值返回,否則返回null

閱讀全文

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

熱點內容
獵人寶寶攻擊命令 瀏覽:159
操作系統是編譯原理嗎 瀏覽:646
雲伺服器遷移後 瀏覽:260
excel格式轉換pdf 瀏覽:987
登錄器一般存在哪個文件夾 瀏覽:535
中興光貓機器碼演算法 瀏覽:330
android響應時間測試 瀏覽:940
java編程思想第四版答案 瀏覽:888
如何對nbt編程 瀏覽:885
mscpdf 瀏覽:948
文件夾d盤突然0位元組可用 瀏覽:272
吃火腿腸的解壓場面 瀏覽:339
衛星鍋加密教程 瀏覽:792
php7的特性是什麼 瀏覽:469
編譯類高級語言源代碼運行過程 瀏覽:177
科普中國app怎麼分享 瀏覽:87
51單片機與32單片機比較 瀏覽:422
SQL加密存儲解密 瀏覽:507
電氣工程師把程序加密 瀏覽:797
解壓切東西動畫版 瀏覽:965