黑马程序员技术交流社区

标题: 关于return this的问题 [打印本页]

作者: 范德农    时间: 2012-10-21 12:40
标题: 关于return this的问题
public class Test3
{
        int i = 7;
        public static void main(String[] args)
        {
                Test3 c=new Test3();
               
Test3 b = c.a();
  System.out.println(b.i);
b.a();
//输出结果为13(age自动归为默认值0)(原因不明)
c.a();
                //输出结果为8
  System.out.println(c.i);
               
        }
        public Test3 a()
        {
                int age = 4;
                age++;
                i++;
                System.out.println(age+i);
                return this;
               
        }
}

作者: 范德农    时间: 2012-10-21 12:42
当方法内有return this的时候,它里面的System.out.println的输出变量的值疑似初始化,这是怎么回事呢,求教
作者: 范德农    时间: 2012-10-21 12:46
  1. public class Test3
  2. {
  3.         int i = 7;
  4.         public static void main(String[] args)
  5.         {
  6.                 Test3 c=new Test3();
  7.                 Test3 b = c.a();
  8.           System.out.println(b.i);
  9.                 b.a();
  10.                 //输出结果为13(age自动归为默认值0)(原因不明)
  11.                 c.a();
  12.                 //输出结果为8
  13.           System.out.println(c.i);
  14.                
  15.         }
  16.         public Test3 a()
  17.         {
  18.                 int age = 4;
  19.                 age++;
  20.                 i++;
  21.                 System.out.println(age+i);
  22.                 return this;
  23.                
  24.         }
  25. }
复制代码

作者: 范德农    时间: 2012-10-21 12:47
问题出在11行
作者: 7℃洋    时间: 2012-10-21 12:57
this在java中属于关键字,return this肯定要出错!
作者: 王威    时间: 2012-10-21 12:57
本帖最后由 王威 于 2012-10-21 12:59 编辑

一旦调用a()方法,那么调用这个方法的对象实例的属性  i   就会加一

public class Test3
{
        int i = 7;
        public static void main(String[] args)
        {
                Test3 c=new Test3();//{c.i=7}

                Test3 b = c.a();//{b.i=8,c.i=8,继而输出a方法里5+8=13,并且在这之后b和c指向同一个引用}
                System.out.println(b.i);//打印出b.i为8
                b.a();//{b.i=9,继而输出a方法里5+9=14,,(同样由于b==c,所以这里c.i=9)}
                //输出结果为13(age自动归为默认值0)(原因不明)
                c.a();//{c.i=10,继而输出a方法里5+10=15}
                //输出结果为8
                System.out.println(c.i);//输出10

        }
        public Test3 a()
        {
                int age = 4;
                age++;
                this.i++;
                System.out.println(age+i);
                return this;

        }
}


作者: 范德农    时间: 2012-10-21 14:07
7℃洋 发表于 2012-10-21 12:57
this在java中属于关键字,return this肯定要出错!

这个在语法上应该没问题吧,因为this指代的是该对象,李刚的疯狂英语教材上也介绍了这个的用法,但是有些细节不明白
作者: 7℃洋    时间: 2012-10-26 20:26
范德农 发表于 2012-10-21 14:07
这个在语法上应该没问题吧,因为this指代的是该对象,李刚的疯狂英语教材上也介绍了这个的用法,但是有些 ...

新手新手   你说的我不太清楚





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