import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) throws ClassNotFoundException,
InstantiationException, IllegalAccessException,
NoSuchMethodException, SecurityException, IllegalArgumentException,
InvocationTargetException, NoSuchFieldException {
Class<?> c = Model.class;
// 获得所有属性
Field[] fields = c.getDeclaredFields();
for (Field f : fields) {
System.out.println(f.getName());
}
System.out.println("------------------------");
// 产生一个对象 ,无参构造
Object object = c.newInstance();
// 获得方法
Method setUsername = c.getMethod("setUsername", String.class);
// 调用方法
setUsername.invoke(object, "1234");
Method getUsername = c.getMethod("getUsername");
Object re = getUsername.invoke(object);
System.out.println(re);
System.out.println("------------------------");
// 有参数构造
Object object2 = c.getConstructor(String.class, String.class)
.newInstance("123456", "111");
Object re2 = getUsername.invoke(object2);
System.out.println(re2);
System.out.println("------------------------");
// 调用私有方法
Method f = c.getDeclaredMethod("f");
f.setAccessible(true);// 忽略java对private的检测
Object re3 = f.invoke(object);
System.out.println(re3);
System.out.println("------------------------");
// 访问私有成员
Field ff = c.getDeclaredField("username");
ff.setAccessible(true);
ff.set(object, "test");
Object re4 = getUsername.invoke(object);
System.out.println(re4);
}
}
public class Model {
private String username, password;
public Model(String username, String password) {
this.username = username;
this.password = password;
}
public Model() {
}
private String f() {
return "这是一个私有方法!";
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}