+ -
当前位置:首页 → 问答吧 → 在看this时遇到问题,希望大家给出解释

在看this时遇到问题,希望大家给出解释

时间:2011-10-08

来源:互联网

public class Leaf{
 int i;
 Leaf(int i){this.i = i;
  }
 Leaf increament(){
  i++;
  return this;
 }
 void print(){
 System.out.println("i = "+i);
  }
 public static void main(String[] args){
  Leaf leaf = new Leaf(8);
  leaf.intcreament().intcreament().print();//这句是什么意思??
 }
}

作者: chengnuo628   发布时间: 2011-10-08

leaf.increament().increament().print();是这个吧leaf.increament()返回的是一个Leaf类型的对象只是调用一次i值就加1呗

作者: LeeHomWong   发布时间: 2011-10-08

leaf.intcreament().intcreament().print();//这句是什么意思??
  楼主没有弄懂返回值啊, 
  leaf.intcreament()返回Leaf对象的引用,由于return this就是返回本身的
  对象引用,之后就一样了,最后调用print方法

作者: cqltwslt   发布时间: 2011-10-08

同意楼上的说法

作者: kevin_lfan   发布时间: 2011-10-08

leaf.increament()返回的一个leaf 后又调用了一次increament(),组后将其打印出来i=8,
其实这句话可以转换为:
Leaf leaf2=leaf.increament();
Leaf leaf3=leaf2.increament();
leaf3.print();

作者: jya126   发布时间: 2011-10-08

同意楼上

作者: shidiqiazao   发布时间: 2011-10-08

同意楼上

作者: tianyafangcaolu   发布时间: 2011-10-08

引用 4 楼 jya126 的回复:
leaf.increament()返回的一个leaf 后又调用了一次increament(),组后将其打印出来i=8,
其实这句话可以转换为:
Leaf leaf2=leaf.increament();
Leaf leaf3=leaf2.increament();
leaf3.print();


这个说法有问题。

首先用带参构造函数生成一个对象,并且其值为8,在调用increament()方法时,i值增加1。可以看出其调用了两次,所以i值应该为10

作者: ksqqxq   发布时间: 2011-10-09

这个其实2楼、4楼说的都是对的,具体的,你可以打印出来看看结果,如果运行时报错,那么你就先调用第一个increament()进行打印,看看什么状况,逐步分析,问题会更清楚。

作者: Baobeiaini97527   发布时间: 2011-10-09

this代表当前类,在这里也就是Leaf

leaf.intcreament().intcreament().print();

上面这句代码调用两次intcreament()方法,每次调用方法后Leaf的成员变量i值加1,并且在返回此对象

最终结果i=10

作者: leilei0932_java   发布时间: 2011-10-09


this指代当前对象,也就是Leaf
return this; 返回的就是一个Leaf对象
leaf.intcreament().intcreament().print();
leaf.intcreament() 此时返回的是一个Leaf对象 此时调用了一个构造方法 i = 8 + 1
leaf.intcreament().intcreament() 在上一步的基础上再调用一次intcreament() 也就是再调用一次构造方法 此时 i = 8 + 1 + 1 = 10
leaf.intcreament().intcreament().print();在上一步的基础上 将结果i 打印出
结果为 10
不知这样解释楼主是否明白?

作者: TKD03072010   发布时间: 2011-10-09

加了两次再打印

作者: lliiqiang   发布时间: 2011-10-09

项目里谁要是写了这样的代码,直接拉出去把腿打断就行了,蛋疼!

作者: z25765339   发布时间: 2011-10-09

应该是先执行leaf.increament(),然后再this.increament(),最后print()。

作者: wuweiqi   发布时间: 2011-10-09

热门下载

更多