import java.lang.reflect.Field;public class ReTest
{
public static void main(String[] args) throws Exception{
P p=new P();
changeValue(p);
} /*
*@  changeValue
*改变对象的值
*/
public static void changeValue(Object obj) throws Exception{
Field[] fields=obj.getClass().getFields();
System.out.println(fields.length);
for(Field field:fields){
if(field.getType() == String.class){
String old=(String)field.get(obj);
String ne=old.replace('a','b');
field.set(obj,ne);
System.out.println(field.getName()+ " old:"+old+" new:"+field.get(obj));
}
}
}}
 //这有类有问题,为什么字段数组总是零,如果换成别的类就行了???
class Po
{
String s1="abc",s2="aee",s3="aaa";

}

解决方案 »

  1.   

    都在注释里写明了.import java.lang.reflect.Field;public class ReTest {
    public static void main(String[] args) throws Exception {
    P p = new P();
    changeValue(p);
    } /*
     * @ changeValue改变对象的值
     */
    public static void changeValue(Object obj) throws Exception {

    //getDeclaredFields 可以获取所有的Fields.而getFields只能获取public的.
    Field[] fields = obj.getClass().getDeclaredFields();
    System.out.println(fields.length);
    for (Field field : fields) {
    if (field.getType() == String.class) {

    //在操作私有字段的时候需要取消"Java 语言访问检查"
    if(!field.isAccessible()){
    field.setAccessible(true);
    }

    String old = (String) field.get(obj);
    String ne = old.replace('a', 'b');
    field.set(obj, ne); System.out.println(field.getName() + " old:" + old + " new:"
    + field.get(obj));
    }
    }
    }}
    class P {
    private String s1 = "abc", s2 = "aee", s3 = "aaa";}
      

  2.   

    恩,谢谢我明白是怎么回事是了,不认真看API上的说明。