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());
}
}
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());
}
}