关于java反射给属性进行赋值的问题!

代码如下:packagecom.itcast.examQuestions.two;importjava.io.FileDescriptor;importjava.lang... 代码如下:
package com.itcast.examQuestions.two;

import java.io.FileDescriptor;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Person {
String name = "小红";
int age = 22 ;

public static void main(String[] agr)throws Exception{
Constructor constructor1 = Person.class.getConstructor(String.class,int.class);
Object per1 = constructor1.newInstance("小明",2);

//System.out.println(name);
Method methodsn = Person.class.getMethod("setName", String.class);
methodsn.invoke(per1, "小黑");
//System.out.println(name);

ChangeStringVlue(per1);
System.out.println(per1);

}

public static void ChangeStringVlue(Object per1)throws Exception{
Field[] fields = per1.getClass().getFields();
for(Field field:fields)
{
if(field.getType() == String.class){

String oldvalue = (String)field.get(per1);
String newvalue = oldvalue.replaceAll("小红", "小白");

field.set(per1,newvalue);

}
}
}

public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString(){
return name;
}
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;
}

}
以上代码为什么不能给 name属性进行赋值?哪错了? 谢谢您的回答!我都研究好久了。
展开
 我来答
luoxuanjin
2011-10-13 · TA获得超过252个赞
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:176万
展开全部
Field[] fields = per1.getClass().getFields();
这句只能取到声明为public的属性,而你的name,age都是使用默认的private属性。
所以取出来的fields为空。
String newvalue = oldvalue.replaceAll("小红", "小白");
这句代码不知是不是你手误了,不存在小红,就不可能转变为小白。
zhukaiheihei
2011-10-13 · TA获得超过607个赞
知道小有建树答主
回答量:3497
采纳率:0%
帮助的人:1141万
展开全部
返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问 "公共" 字段。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式