1、Field类代表某个类中的一个成员变量
2、演示用eclipse自动生成Java类的构造方法
3、问题:得到的Field对象是对应到类上面的成员变量,还是对应到对象上的成员变量?类只有一个,而该类的实例对象有多个,如果是与对象关联,那关联的是哪个对象呢?所以字段fieldX代表的是变量X的定义,而不是具体的X变量。
2、演示用eclipse自动生成Java类的构造方法
3、问题:得到的Field对象是对应到类上面的成员变量,还是对应到对象上的成员变量?类只有一个,而该类的实例对象有多个,如果是与对象关联,那关联的是哪个对象呢?所以字段fieldX代表的是变量X的定义,而不是具体的X变量。
4、示例代码
供测试的类的代码:
package cn.sunft.day01.reflect;
/**
* 定义一个点的类,供反射测试用
* @author sunft
*
*/
public class ReflectPoint {
private int x;
public int y;
public ReflectPoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
测试类的代码:
package cn.sunft.day01.reflect;
import java.lang.reflect.Field;
/**
* 测试反射中的Field
* @author sunft
*
*/
public class FieldTest {
public static void main(String[] args) throws Exception {
ReflectPoint pt1 = new ReflectPoint(3, 5);
//这种方式只能获取public修饰的属性
Field fieldY = pt1.getClass().getField("y");
//fieldY的值是多少?是5,错!fieldY不是对象身上的变量,
//而是类上,要用它去取某个对象上对应的值
System.out.println(fieldY.get(pt1));
//私有的属性
Field fieldX = pt1.getClass().getDeclaredField("x");
fieldX.setAccessible(true);//设置访问为true
System.out.println(fieldX.get(pt1));
}
}