Think in Java读书笔记 - this 关键字

 1 class Banana {
 2     void peel(int i){ /* statement */ }
 3 } 
 4     public Class BananaPeel {
 5         public static void main(String [] args){
 6             Banana a = new Banana(),
 7                    b = new Banana();
 8             a.peel(1);
 9             b.peel(2);
10 }}  

同一类型的两个对象 a , b  都调用着统一方法 peel()

如何知道它是被谁调用编辑器做了内幕工作-将对象作为第一参数传递给peel。

Banana.pell(a,1)

Banana.pell(b,2)  并不能这么书写,只是帮我们理解实际所发生的事情。

假设要在方法内部获得当前对象的引用,this 就是表示“调用方法的那个对象” 的引用。

public class Leaf{
    int i = 0;
    Leaf  test(){
        i++;
        return this;
    }

    void print(){
        System.out.print("i = " + i)
    }
    public static void main(String[] args){
        Leaf x = new Leaf();
        x.test().test().test().print()
    }
} 
/*output:
i = 3
*///:~

test方法返回了对当前对象的引用,所以很容易在一条语句中对同一对象执行多次操作。

 

class person {
    public void eat(Apple apple){
        Apple peeled = apple.getPeeled();
        System.out.println("lol");
}}

class Peeler{
    static Apple peel(Apple apple){
        return apple
}}

class Apple{
    Apple getPeeled(){
        return Peeler.peel(this)}}

public class PassingThis{
    public static void main(String[] args){
        new person().eat(new Apple());
}}/*output:
lol
*///:~
this 关键字当前对象传递给其他方法

 

 


更多参考:
http://www.cnblogs.com/hasse/p/5023392.html

posted @ 2017-11-01 11:05  _a11en  阅读(181)  评论(0编辑  收藏  举报