Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15984
  • 博文数量: 7
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-03 02:42
文章分类
文章存档

2011年(1)

2010年(3)

2009年(3)

我的朋友
最近访客

分类: Java

2010-11-09 17:20:09

第一个正常版本
 

//:MyLeaf.java

public class MyLeaf{
    int i = 0;
    MyLeaf increment(){
        i++;
        return this;
    }
    void print(){
        System.out.println("i = " + i);
        
    }
    public static void main(String[] args){
        MyLeaf X = new MyLeaf();
        X.increment().increment().increment();
        X.increment();
        X.print();
    }
}


问题1:X.increment().increment().increment();是对三个X.increment();的省略吗?

不是  请看第二版程序:

 

//:MyLeaf.java

public class MyLeaf{
 int i = 0;
 //MyLeaf increment(){

 increment(){
  i++;
 // return this;

 }
 void print(){
  System.out.println("i = " + i);
  
 }
 public static void main(String[] args){
  MyLeaf X = new MyLeaf();
  //X.increment().increment().increment();

  X.increment();
  X.increment();
  X.print();
 }
}



E:\android\JAVA\test_code>javac MyLeaf.java
MyLeaf.java:5: 方法声明无效;需要返回类型
    increment(){
    ^
1 错误
 


为什么无法编译通过 C语言的应该可以吧 好吧 我标准点写。

 

//:MyLeaf.java

public class MyLeaf{
    int i = 0;
    //MyLeaf increment(){

    void increment(){
        i++;
    //    return this;

    }
    void print(){
        System.out.println("i = " + i);
        
    }
    public static void main(String[] args){
        MyLeaf X = new MyLeaf();
        //X.increment().increment().increment();

        X.increment();
        X.increment();
        X.print();
    }
}

这样程序可以正常运行 结果是

E:\android\JAVA\test_code>java MyLeaf
i = 2
如果书写 X.increment().increment().increment();
将报错:

E:\android\JAVA\test_code>javac MyLeaf.java
MyLeaf.java:15: 无法取消引用 void
  X.increment().increment().increment();
               ^
1 错误

好吧 回到第一个版本 你MLGB到底啥意思啊。

 

从基本概念出发  对象是对应类的实体 this 是对调用方法那个对象的引用。

so

X.increment()中 执行的是i++; return 当时的Leaf 这个类的对象x  但是return this 你返回 X  不是会无止尽的运行increment吗?因为你的每个return都有X啊。 妈的 又一个问题。。。

有查阅说
x.increment().increment().increment().print();
这里可以这么看x.increment(),然后返回了this就相当于返回了当前的对象,对象又可以调用方法,
x.increment().increment().increment().print();继续
=this.increment().increment().print();继续=this.increment().print();继续=this.print();

那更不理解返回的对象了,它是返回X 这个整体的哪个部分信息呢  只是变量? 与函数无关?
 
好吧 这样理解  在return this的时候 这个时候的X  按C语言的理解应该是这样 返回X所指定的类(就像C语言中的结构体 好吧 它带函数(方法)滴说)对应的区域。  如果有执行体 那么不好意思 不动 只有变量之类的有意义。相当于说吧 将这个区域的变量之类的值暂时保管者承接给下一次使用。
好吧 先这样理解  以后再改。
阅读(276) | 评论(0) | 转发(0) |
0

上一篇:my_helloData.java

下一篇:制作工具库

给主人留下些什么吧!~~