import java.lang.reflect.Field;
import java.util.Arrays;
/**
* Created by Administrator on 2017/1/11 0011.
*/
public class Test {
public static void main(String[] args) throws Exception {
/**
* 获取Class对象有三种方法:
* 1. 实体对象.getClass();
* 2.类名.class;
* 3.Class.forName("User");
*/
Class c = new User().getClass();
Class cls = User.class;
System.out.println(cls.newInstance());
Class clsByString = Class.forName("User");
System.out.println(clsByString.newInstance());
/************************************************************************************/
/**
* 1.获得一个指定的构造器
* Constructor<T> getConstructor(Class<?>... parameterTypes)
*
*/
println(cls.getConstructor(String.class).newInstance("yjh"));
/**
* 1.获得一个指定的方法
* Method getMethod(String name, Class<?>... parameterTypes)
*
* 如果这个方法是一个静态方法,调用时可以写成
* invoke(null,[这是加入该方法需要的参数]);
*/
cls.getMethod("say",String.class).invoke(cls.newInstance(), "yjh");
/**
* 如果这个方法的参数是可变长参数,若其参数为基本类型
*/
cls.getMethod("show",int[].class).invoke(cls.newInstance(),new int[]{1,2,3});
/**
* 若可变参数类型不是基本类型
* 原因在于:
* 文档中解释“对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
* 个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。”
*/
cls.getMethod("show",String[].class).invoke(null,new Object[]{new String[]{"y","j","h"}});
/**
* 获取类中一个属性
*/
Field field = cls.getDeclaredField("name");
/**
* 设置可操作权限
*/
field.setAccessible(true);
Object object = cls.newInstance();
/**
* 为某一指定对象的该属性赋值
*/
field.set(object, "yjh123");
println(object);
}
static void println(Object objects) {
System.out.println(objects);
}
}
class User {
private String name;
private int age;
public User() {
}
public User(String name) {
this.name = name;
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "user{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
public void say(String string) {
System.out.println(
"你好" + string
);
}
public static void show(String...strings){
System.out.println(Arrays.toString(strings));
}
public static void show(int...ints){
System.out.println(Arrays.toString(ints));
}
}
简单的java反射练习
最新推荐文章于 2024-07-21 21:49:34 发布