java reflect

import java.lang.reflect.Field;
import java.lang.reflect.Method;



class User{

private String userName="";

public String getUserName() {
return userName;
}
public int add(int a, int b) {
return a + b;
}
private int minus(int a,int b)
{
return a-b;
}

}
public class ReflectTest {

/**
* @param args
*/
public static void main(String[] args) throws Exception {

Class<?> classType=Class.forName("User");//得到class對象
Method[] meth=classType.getDeclaredMethods();//得到該class所有聲明method
for (Method method : meth) {
System.out.println("method:"+method);
}
Field [] fiel=classType.getDeclaredFields();//得到該class所有聲明field
for (Field field : fiel) {
System.out.println("fiueld:"+field);
}
User user=(User)classType.newInstance();//通過class獲得User對象
Method method=classType.getMethod("add",new Class<?>[]{int.class,int.class});//獲取add方法,考慮到方法重載,還要加上參數條件才能唯一限定一個方法
int result=(Integer)method.invoke(user, new Object[]{3,9});//通過invoke調用方法
System.out.println("addresult:"+result);
/**
* 通過反射來訪問方法的私有方法
*/
Method methodminus=classType.getDeclaredMethod("minus",new Class<?>[]{int.class,int.class});//通過getDeclaredMethod取得私有的方法
methodminus.setAccessible(true);//將可訪問性設置爲true
int resultminus=(Integer)methodminus.invoke(user, new Object[]{3,9});//通過invoke調用方法
System.out.println("resultminus:"+resultminus);
/**
* 通過反射來訪問方法的私有屬性
*/
Field field=classType.getDeclaredField("userName");
field.setAccessible(true);//將可訪問性設置爲true
field.set(user, "bingyingao");//給私有屬性userName賦值
System.out.println(user.getUserName());
}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章