反射中必须学会的几个用法 :
假设有下面的 Person 类 :
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
操作前准备 :
public static void main(String[] args) throws Exception{
Class c = Person.class; //获取Class对象
}
1.通过反射,操作构造方法
public static void main(String[] args) throws Exception{
Class c = Person.class; //获取Class对象
/* 操作 构造方法 */
Constructor constructor = c.getConstructor(String.class, int.class); //获取有参构造方法
Person person = (Person)constructor.newInstance("灭绝师太",30);//调用构造方法,给属性初始化
2.通过反射,操作成员方法
public static void main(String[] args) throws Exception{
Class c = Person.class; //获取Class对象
/* 操作 成员方法 */
Method method = c.getMethod("setName", String.class); //指定 方法名 方法的参数类型
method.invoke(person,"张三丰"); // 传入 对象 方法的参数
}
3.通过反射,操作成员变量
public static void main(String[] args) throws Exception{
Class c = Person.class; //获取Class对象
/* 操作 成员变量 */
Field field = c.getDeclaredField("age"); //指定 变量名
field.setAccessible(true); //取消权限检查
field.setInt(person,50); //传入 对象 变量名
学习好反射和注解,才能够看懂框架的源码,框架中用到了大量的反射、注解,如果不学会这两个,只能用框架,而不能看懂它的源码。