首页 > 代码库 > java中this关键字

java中this关键字

如果有同意类型的两个对象,分别是a和b,如何让两个对象都能调用某个方法呢?

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

如果只有一个peel方法,它如何知道是被a还是被b调用的呢?

为了能用简便、面向对象的语法来编写代码,即“发送消息给对象”,编译器做了一些幕后工作。它暗自把所操作对象的引用作为第一个参数传递给peel,因此上面的两个方法就变成了

Banana.peel(a, 1);Banana.peel(b, 2);

这是内部表示形式,我们不能这么写!

假设你希望方法的内部获得对当前对象的引用,由于这个引用时由编译器偷偷传入的,所以没有标识符可用,但是,为此有个专门关键字:this。this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。this用法和其他对象并无不同。但要注意,如果方法内部调用同一个类的盈利一个方法,就不能使用this。直接调用即可。即可以这样写:

public  class Apricot{    void pick(){        /*……*/    }        void pit(){         pick();         /*……*/    }}

在pit内部,可以写this.pick();但是无必要,编译器可自动添加。

this关键字对于将当前对象传递给其他方法也是很有用的。如:

 1 class Person{ 2    public void eat(Apple apple){ 3         Apple peeled = apple.getPeeled(); 4         System.out.println("Yummy"); 5    } 6  7    class Peeler(){ 8         static Apple peel(Apple apple){ 9               return apple;10         }11    }12 13    class Apple {14           Apple getPeeled(){15                return Peeler.peel(this);16           }17     }18 19     public class PassingThis{20          public static void main(String[] args){21                 new Person.eat(new Apple());22          }23     }24 25 }

这里Apple 需要调用Peeler.peel()方法,他是一个外部的工具方法,将执行由于某种原因而必须放在Apple外部的操作,为了将其自身传递给外部方法,Apple必须使用this关键字。

 

以上就是this的基本用法,复杂用法留待以后补充。

java中this关键字