A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张文强 中级黑马   /  2012-7-1 16:09  /  1777 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class IntroSpectorTest {

  2.         public static void main(String[] args) throws Exception {
  3.                 // TODO Auto-generated method stub
  4.                 ReflectPoint pt1 = new ReflectPoint();//创建操作对象实例
  5.                
  6.                 String str = "s";            //定义要操作的对象属性名
  7.                 //"x"-->"X"-->"getX"-->MethodGetX-->
  8.                 //getMethod(pt1, str);
  9.        
  10.                 Object value = "123";
  11.                 PropertyDescriptor pd1 = new PropertyDescriptor(str, pt1.getClass());
  12.                 Method methodSetX = pd1.getWriteMethod();
  13.                 methodSetX.invoke(pt1, value);//此处是设置对象的属性s的值为123,是不是就是类ReflectPoint的s值?
  14.             System.out.print(pt1.getS()); //此处得到的是属性s的值为123,为什么类ReflectPoint值没变。
  15.         }                                                                  //是不改变的是.class文件内的值而.java中值不变。个人对反射那的知识点还不很熟悉,高手帮忙解释下感谢
  16.        
  17.         }


  18. class ReflectPoint {
  19.        
  20.         private String s = "hello";
  21.        
  22.         public String getS() {
  23.                 return s;
  24.         }

  25.         public void setS(String s) {
  26.                 this.s = s;
  27.         }
  28.         public ReflectPoint(String s) {
  29.                 super();
  30.                 this.s = s;
  31.         }

  32.         public ReflectPoint() {

  33.         }
  34. }
复制代码

1 个回复

倒序浏览
首先pt1是ReflectPoint的一个对象,而private String s 是ReflectPoint的一个成员变量。他是个成员变量,而不是一个静态变量。也就是说它的改变是随着对象的改变而改变的
如果你new了是个ReflectPoint的对象,而每个对象的s的值都赋值一个新的值,打印出来你会发现有十个结果,因为他只服务于他所属的对象。想要他随时改变,或者值是唯一的,那么给他加一个static关键字就可以搞定了。

评分

参与人数 1技术分 +1 收起 理由
王昭珽 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马