黑马程序员技术交流社区

标题: 看javaBean视频的疑惑 [打印本页]

作者: 张文强    时间: 2012-7-1 16:09
标题: 看javaBean视频的疑惑
  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. }
复制代码

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2