導航:首頁 > 編程語言 > 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反射獲取變數值相關的資料

熱點內容
挖掘機程序員哪個好 瀏覽:458
方舟怎麼進上一次進的伺服器 瀏覽:635
pdf怎樣剪切 瀏覽:906
git編譯所有文件命令 瀏覽:694
偽軍pdf 瀏覽:418
如何判斷基本命令 瀏覽:972
pdf批量刪除 瀏覽:943
廣播android靜態動態區別 瀏覽:390
centos7設置為命令行啟動 瀏覽:570
程序員資質資格證 瀏覽:217
常見編碼加密 瀏覽:236
阿狸免費雲伺服器 瀏覽:764
快速配置伺服器bmc地址 瀏覽:968
機械手臂編程自動化 瀏覽:501
怎麼看銀行app的銀行卡號 瀏覽:84
pdf文件改ppt 瀏覽:196
ecs對比雲伺服器 瀏覽:852
必剪app怎麼沒有美顏 瀏覽:176
唯庫的視頻怎麼下載app 瀏覽:465
面度雲伺服器 瀏覽:353