import java.lang.reflect.Field;
class Point
{
private int x;
public int y;
public String str1 = "ball";
public String str2 = "basketball";
public String str3 = "itcast";
public int getX() {
return x;
}
public int getY() {
return y;
}
public Point(int x, int y)
{
super();
this.x = x;
this.y = y;
}
public String toString()
{
return ("str1 ="+str1+"\n"+"str2="+str2+"\nStr3="+str3);
}
}
class Test
{
public static void main(String [] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException
{
Point p1 = new Point(3,5);
System.out.println("Point的 x="+p1.getX());
System.out.println("Point的 y="+p1.getY());
Field fieldY = p1.getClass().getField("y");
System.out.println("得到类名:"+p1.getClass());
System.out.println("得到类的指定成员名:"+p1.getClass().getField("y"));
System.out.println("通过传入特定对象,得到指定对象指定成员的值:"+fieldY.get(p1));
System.out.println("======================================================");
//Field fieldX = p1.getClass().getField("x");//不能直接获取私有成员,会报异常java.lang.NoSuchFieldException
Field fieldX = p1.getClass().getDeclaredField("x");//
System.out.println("得到类名:"+p1.getClass());
fieldX.setAccessible(true);//针对私有成员此处设置为true后可以得到私有成员的值,成为暴力反射。
System.out.println("通过传入特定对象,得到指定对象指定成员的值:"+fieldX.get(p1));
System.out.println("======================================================");
changeStringValue(p1);
System.out.println(p1);
}
/**
* 通过反射修改传入类的所有String类型成员的内容(如果是b就改成a)
* @param obj
* @return
* 便利
*
* */
private static void changeStringValue(Object obj) throws IllegalArgumentException, IllegalAccessException
{
// TODO Auto-generated method stub
Field[] fields = obj.getClass().getFields();
for(Field field : fields)
{
if(field.getType()==String.class)
{
String oldValue = (String)field.get(obj);
String newValue = oldValue.replace("b", "a");
field.set(obj, newValue);
}
}
}
}
打印结果:
Point的 x=3
Point的 y=5
得到类名:class Point
得到类的指定成员名:public int Point.y
通过传入特定对象,得到指定对象指定成员的值:5
======================================================
得到类名:class Point
通过传入特定对象,得到指定对象指定成员的值:3
======================================================
str1 =aall
str2=aasketaall
Str3=itcast