zoukankan      html  css  js  c++  java
  • 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的基本用法,复杂用法留待以后补充。

  • 相关阅读:
    jQuery 2.0.3 源码分析 回调对象
    JQuery+JQuery ui实现的弹出窗口+遮罩层+拖动+更改大小~!
    2019.8.25 小结
    2019.8.23 小结
    宜中食堂游记
    2019.8.21小结
    2019.8.22小结
    2019.8.19小结
    题解 CF499A 【Watching a movie】
    2019.8.18小结
  • 原文地址:https://www.cnblogs.com/Pillar/p/4218073.html
Copyright © 2011-2022 走看看