麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

this關鍵字

2019-11-18 13:25:23
字體:
來源:轉載
供稿:網友

  假如有兩個同類型的對象,分別叫作a和b,那么您也許不知道如何為這兩個對象同時調用一個f()方法:
  class Banana { void f(int i) { /* ... */ } }
  Banana a = new Banana(), b = new Banana();
  a.f(1);
  b.f(2);
    若只有一個名叫f()的方法,它怎樣才能知道自己是為a還是為b調用的呢?
    為了能用簡便的、面向對象的語法來書寫代碼——亦即“將消息發給對象”,編譯器為我們完成了一些幕后工作。其中的秘密就是第一個自變量傳遞給方法f(),而且那個自變量是預備操作的那個對象的句柄。所以前述的兩個方法調用就變成了下面這樣的形式:
  Banana.f(a,1);
  Banana.f(b,2);
    這是內部的表達形式,我們并不能這樣書寫表達式,并試圖讓編譯器接受它。但是,通過它可理解幕后到底發生了什么事情。
    假定我們在一個方法的內部,并希望獲得當前對象的句柄。由于那個句柄是由編譯器“秘密”傳遞的,所以沒有標識符可用。然而,針對這一目的有個專用的要害字:this。this要害字(注重只能在方法內部使用)可為已調用了其方法的那個對象生成相應的句柄。可象對待其他任何對象句柄一樣對待這個句柄。但要注重,假若預備從自己某個類的另一個方法內部調用一個類方法,就不必使用this。只需簡單地調用那個方法即可。當前的this句柄會自動應用于其他方法。所以我們能使用下面這樣的代碼:
  class APRicot {
  void pick() { /* ... */ }
  void pit() { pick(); /* ... */ }
  }
    在pit()內部,我們可以說this.pick(),但事實上無此必要。編譯器能幫我們自動完成。this要害字只能用于那些非凡的類——需明確使用當前對象的句柄。例如,假若您希望將句柄返回給當前對象,那么它經常在return語句中使用。
    由于increment()通過this要害字返回當前對象的句柄,所以可以方便地對同一個對象執行多項操作。
  1. 在構建器里調用構建器
    若為一個類寫了多個構建器,那么經常都需要在一個構建器里調用另一個構建器,以避免寫重復的代碼。可用this要害字做到這一點。
  通常,當我們說this的時候,都是指“這個對象”或者“當前對象”。而且它本身會產生當前對象的一個句柄。在一個構建器中,若為其賦予一個自變量列表,那么this要害字會具有不同的含義:它會對與那個自變量列表相符的構建器進行明確的調用。這樣一來,我們就可通過一條直接的途徑來調用其他構建器。如下所示:
    其中,構建器Flower(String s,int petals)向我們揭示出這樣一個問題:盡管可用this調用一個構建器,但不可調用兩個。除此以外,構建器調用必須是我們做的第一件事情,否則會收到編譯程序的報錯信息。
    這個例子也向大家展示了this的另一項用途。由于自變量s的名字以及成員數據s的名字是相同的,所以會出現混淆。為解決這個問題,可用this.s來引用成員數據。經常都會在java代碼里看到這種形式的應用,本書的大量地方也采用了這種做法。
  在print()中,我們發現編譯器不讓我們從除了一個構建器之外的其他任何方法內部調用一個構建器。
  2. static的含義
    理解了this要害字后,我們可更完整地理解static(靜態)方法的含義。它意味著一個特定的方法沒有this。我們不可從一個static方法內部發出對非static方法的調用(注釋②),盡管反過來說是可以的。而且在沒有任何對象的前提下,我們可針對類本身發出對一個static方法的調用。事實上,那正是static方法最基本的意義。它就好象我們創建一個全局函數的等價物(在C語言中)。除了全局函數不答應在Java中使用以外,若將一個static方法置入一個類的內部,它就可以訪問其他static方法以及static字段。
    ②:有可能發出這類調用的一種情況是我們將一個對象句柄傳到static方法內部。隨后,通過句柄(此時實際是this),我們可調用非static方法,并訪問非static字段。但一般地,假如真的想要這樣做,只要制作一個普通的、非static方法即可。
    有些人抱怨static方法并不是“面向對象”的,因為它們具有全局函數的某些特點;利用static方法,我們不必向對象發送一條消息,因為不存在this。這可能是一個清楚的自變量,若您發現自己使用了大量靜態方法,就應重新思考自己的策略。然而,static的概念是非常實用的,許多時候都需要用到它。所以至于它們是否真的“面向對象”,應該留給理論家去討論。事實上,即使Smalltalk在自己的“類方法”里也有類似于static的東西。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 渔夫荒淫艳史 | 2021狠狠操| 国产美女视频黄a视频免费 日韩黄色在线播放 | 免费在线观看毛片视频 | 羞羞视频免费视频欧美 | 国产精品久久久久网站 | 欧美一区在线观看视频 | 久久久免费观看完整版 | 露脸各种姿势啪啪的清纯美女 | 免费观看高清视频网站 | 久草热久草视频 | 日韩午夜一区二区三区 | 人成免费a级毛片 | 日韩精品久久久 | 成人毛片免费在线 | 97久久精品一区二区三区观看 | 成人区一区二区三区 | 91 久久 | 欧美 日韩 中文 | 青青草成人av | 久久久噜噜噜久久熟有声小说 | 欧美一级片一区 | 一区二区三区日韩 | 91网视频| 青草视频在线观看视频 | 激情在线免费观看 | 国产精品刺激对白麻豆99 | 九九热欧美| 深夜激情视频 | 国产羞羞视频 | 一区在线免费视频 | 久久久久久久久久久久久久久伊免 | 黄视频免费在线 | 久久精品超碰 | 欧美成人理论片乱 | 国产成人综合在线观看 | www.guochanav.com | 亚洲午夜不卡 | 久久精品视频在线看99 | 深夜福利视频免费观看 | 久久不射电影网 |