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的基本用法,复杂用法留待以后补充。

原文地址:https://www.cnblogs.com/Pillar/p/4218073.html