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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范德农 中级黑马   /  2012-10-21 12:40  /  1662 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;
               
        }
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

7 个回复

倒序浏览
当方法内有return this的时候,它里面的System.out.println的输出变量的值疑似初始化,这是怎么回事呢,求教
回复 使用道具 举报
  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. }
复制代码
回复 使用道具 举报
问题出在11行
回复 使用道具 举报
this在java中属于关键字,return this肯定要出错!

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王威 于 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;

        }
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
7℃洋 发表于 2012-10-21 12:57
this在java中属于关键字,return this肯定要出错!

这个在语法上应该没问题吧,因为this指代的是该对象,李刚的疯狂英语教材上也介绍了这个的用法,但是有些细节不明白
回复 使用道具 举报
7℃洋 中级黑马 2012-10-26 20:26:02
8#
范德农 发表于 2012-10-21 14:07
这个在语法上应该没问题吧,因为this指代的是该对象,李刚的疯狂英语教材上也介绍了这个的用法,但是有些 ...

新手新手   你说的我不太清楚
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马