熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java中的this關鍵字

2013-11-15 11:42:01  來源: JSP教程 

  
  如果有兩個同類型的對象分別叫作a和b那麼您也許不知道如何為這兩個對象同時調用一個f()方法
  
  class Banana { void f(int i) { /* */ } }
  Banana a = new Banana() b = new Banana();
  af();
  bf();
  
  若只有一個名叫f()的方法它怎樣才能知道自己是為a還是為b調用的呢?
  為了能用簡便的面向對象的語法來書寫代碼——亦即將消息發給對象編譯器為我們完成了一些幕後工作其中的秘密就是第一個自變量傳遞給方法f()而且那個自變量是准備操作的那個對象的句柄所以前述的兩個方法調用就變成了下面這樣的形式
  
  Bananaf(a);
  Bananaf(b);
  
  這是內部的表達形式我們並不能這樣書寫表達式並試圖讓編譯器接受它但是通過它可理解幕後到底發生了什麼事情
  假定我們在一個方法的內部並希望獲得當前對象的句柄由於那個句柄是由編譯器秘密傳遞的所以沒有標識符可用然而針對這一目的有個專用的關鍵字thisthis關鍵字(注意只能在方法內部使用)可為已調用了其方法的那個對象生成相應的句柄可象對待其他任何對象句柄一樣對待這個句柄但要注意假若准備從自己某個類的另一個方法內部調用一個類方法就不必使用this只需簡單地調用那個方法即可當前的this句柄會自動應用於其他方法所以我們能使用下面這樣的代碼
  
  class Apricot {
  void pick() { /* */ }
  void pit() { pick(); /* */ }
  }
  
  在pit()內部我們可以說thispick()但事實上無此必要編譯器能幫我們自動完成this關鍵字只能用於那些特殊的類——需明確使用當前對象的句柄例如假若您希望將句柄返回給當前對象那麼它經常在return語句中使用
  
  
  //: Leafjava
  // Simple use of the this keyword
  
  public class Leaf {
   private int i = ;
   Leaf increment() {
    i++;
    return this;
   }
   void print() {
    Systemoutprintln(i = + i);
   }
   public static void main(String[] args) {
    Leaf x = new Leaf();
    xincrement()increment()increment()print();
   }
  } ///:~
  
  由於increment()通過this關鍵字返回當前對象的句柄所以可以方便地對同一個對象執行多項操作

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19455.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.