反射 --- 成员变量Field类的反射
2011-11-13 15:49
211 查看
1.Field类代表某个类中的所有成员变量的集合
实例1:
public class ReflectPoint {
private int x;//私有成员变量
public int y;
//公有成员变量
public ReflectPoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
}
ReflectPoint pt1 = new ReflectPoint(3, 5); //创建两个实例对象
ReflectPoint pt2 = new ReflectPoint(4, 6);
Field fieldY = ReflectPoint.class.getField("y");
//Field类对象fieldY -----> ReflectPoint 中的 y 成员变量
System.out.println(fieldY.get(pt1)); //输出fieldY.get(pt1)的值,5
System.out.println(fieldY.get(pt2)); //输出fieldY.get(pt2)的值,6
Field fieldX = ReflectPoint.class.getDeclaredField("x");//Field类对象fieldX -----> ReflectPoint 中的x 成员变量,此变量是私有成员,所以用getDeclaredField("x")方法
fieldX.setAccessible(true); //将fieldX变为可见,因为私有成员变量 x 不可见
System.out.println(fieldX.get(pt1)); //输出fieldX.get(pt1)的值,3
System.out.println(fieldX.get(pt2)); //输出fieldX.get(pt2)的值,4
实例2:
public class ReflectPoint {
public String str1 = "ball";
public String str2 = "basketball";
public String str3 = "back";
@Override
public String toString() {
return "ReflectPoint [str1=" + str1 + ", str2=" + str2 + ", str3="
+ str3 + "]";
}
}
private static void changeStringValue(Object obj) throws Exception {//将对象字符串中的'b'字母改为'a'
// TODO Auto-generated method stub
Field [] fields = ReflectPoint.class.getFields();//Field数组
for(Field field:fields){//增强型的for循环
if(field.getType() == String.class){//此处用 == 不用equals(),因为String类型的字节码只有一个
String oldString = (String)field.get(obj);
String newString = oldString.replace('b', 'a');
field.set(obj, newString);//将对象中的String类型成员变量的值变为新的值
}
}
ReflectPoint pt1 = new ReflectPoint(3, 5);
changeStringValue(pt1);
System.out.println(pt1);//输出ReflectPoint [str1=aall, str2=aasketaall, str3=aack]
实例1:
public class ReflectPoint {
private int x;//私有成员变量
public int y;
//公有成员变量
public ReflectPoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
}
ReflectPoint pt1 = new ReflectPoint(3, 5); //创建两个实例对象
ReflectPoint pt2 = new ReflectPoint(4, 6);
Field fieldY = ReflectPoint.class.getField("y");
//Field类对象fieldY -----> ReflectPoint 中的 y 成员变量
System.out.println(fieldY.get(pt1)); //输出fieldY.get(pt1)的值,5
System.out.println(fieldY.get(pt2)); //输出fieldY.get(pt2)的值,6
Field fieldX = ReflectPoint.class.getDeclaredField("x");//Field类对象fieldX -----> ReflectPoint 中的x 成员变量,此变量是私有成员,所以用getDeclaredField("x")方法
fieldX.setAccessible(true); //将fieldX变为可见,因为私有成员变量 x 不可见
System.out.println(fieldX.get(pt1)); //输出fieldX.get(pt1)的值,3
System.out.println(fieldX.get(pt2)); //输出fieldX.get(pt2)的值,4
实例2:
public class ReflectPoint {
public String str1 = "ball";
public String str2 = "basketball";
public String str3 = "back";
@Override
public String toString() {
return "ReflectPoint [str1=" + str1 + ", str2=" + str2 + ", str3="
+ str3 + "]";
}
}
private static void changeStringValue(Object obj) throws Exception {//将对象字符串中的'b'字母改为'a'
// TODO Auto-generated method stub
Field [] fields = ReflectPoint.class.getFields();//Field数组
for(Field field:fields){//增强型的for循环
if(field.getType() == String.class){//此处用 == 不用equals(),因为String类型的字节码只有一个
String oldString = (String)field.get(obj);
String newString = oldString.replace('b', 'a');
field.set(obj, newString);//将对象中的String类型成员变量的值变为新的值
}
}
ReflectPoint pt1 = new ReflectPoint(3, 5);
changeStringValue(pt1);
System.out.println(pt1);//输出ReflectPoint [str1=aall, str2=aasketaall, str3=aack]
相关文章推荐
- java基础巩固系列(三):成员变量反射的Field类
- java反射学习笔记(3)---使用Class来获取方法、成员变量、构造函数信息
- 深入理解 Java 反射:Field (成员变量)
- JAVA反射(2) - Field成员变量 学习笔记
- 黑马程序员---反射,Class类,Method类,Field类,数组参数的成员方法
- 利用反射技术修改类中的字段(成员变量的反射)
- java利用反射来调用一个类的私有方法和成员变量
- 成员变量反射的综合案例
- 成员变量反射
- Java反射四 成员变量
- 反射获取成员变量,并修改值
- Java反射获取成员变量
- java 反射机制 读取私有成员变量
- java 反射修改私有成员变量
- Android(java)学习笔记109:通过反射获取成员变量和成员方法并且使用
- Java基础---基础加强---增强for循环、自动拆装箱及享元、枚举的作用、实现带有构造方法、透彻分析反射的基础_Class类、成员变量的反射、数组参数的成员方法进行反射、数组的反射应用
- 反射_通过反射获取成员变量并使用
- Java使用反射来获取成员变量泛型信息
- 通过反射获取构造方法,成员变量及成员方法
- 反射获取成员变量