自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java語言中This關(guān)鍵字應(yīng)用淺析

開發(fā) 后端
本文向你介紹Java語言中的This關(guān)鍵字的使用,包括引用成員變量、調(diào)用類的構(gòu)造方法等知識。

應(yīng)用一:引用成員變量

  1. public class Student{ //定義一個類,類的名字為student。   
  2.   public Student(){ //定義 一個方法,名字與類相同故為構(gòu)造方法  
  3.  
  4.   this(“l(fā)uobo”)  
  5.  
  6.   }  
  7.  
  8.   public Student(String name){ //定義一個帶形式參數(shù)的構(gòu)造方法  
  9.  
  10.   }  
  11.  

如上面這個代碼中,有一個成員變量name。同時在方法中有個形式參數(shù),名字也是name。然 后再方法中將形式參數(shù)name的值傳遞給成員變量name。雖然我們可以看明白這個代碼的含義,但是作為 Java編譯器它是怎么判斷的呢?到底是將形式參數(shù)name的值傳遞給成員變量name,還是反過來講成員變量 name的值傳遞給形式參數(shù)name呢?也就是說,兩個變量名字如果相同的話,那么Java如何判斷使用哪個變 量?此時this這個關(guān)鍵字就起到作用了。This這個關(guān)鍵字其代表的就是對象中的成員變量或者方法。也就 是說,如果在某個變量前面加上一個this關(guān)鍵字,其指的就是這個對象的成員變量或者方法,而不是指成 員方法的形式參數(shù)或者局部變量。為此在上面這個代碼中,this.name代表的就是對象中的成員變量,又 叫做對象的屬性。而后面的name則是方法的形式參數(shù)。代碼this.name=name就是將形式參數(shù)的值傳遞給成 員變量。這就是上面這個代碼的具體含義。

一般情況下,在Java語言中引用成員變量或者成員方法都是以對象名.成員變量或者對象名.成員 方法的形式。不過有些程序員即使在沒有相同變量的時候,也喜歡使用this.成員變量的形式來引用變量 。這主要是從便于代碼的閱讀考慮的。一看到這個this關(guān)鍵字就知道現(xiàn)在引用的變量是成員變量或者成員 方法,而不是局部變量。這無形中就提高了代碼的閱讀性。不過話說回來,這是this關(guān)鍵字在Java語言中 的最簡單的應(yīng)用。從這個應(yīng)用中,我們可以看出this關(guān)鍵字其代表的就是對象的名字。掌握這個基本的原 理之后,再了解后續(xù)的一些高級應(yīng)用,也就是水到渠成的事情了。

筆者這里只是以一個形式參數(shù)為例。其實如果是局部變量的話,也是相同的道理。如在上面的代 碼中,name不是形式參數(shù),而是一個局部變量。此時Java也會遇到相同的疑惑,即變量名name代表的到底 是局部變量還是形式參數(shù)?name=name到底代表的是什么含義?根據(jù)局部變量的作用域,在方法內(nèi)部,如果 局部變量與成員變量同名的話,那么是以局部變量為準??墒窃趎ame=name這個賦值語句中,將局部變量 的值賦值給自己,顯然并不是很合適。根據(jù)代碼的含義,本來的意思應(yīng)該是將局部變量賦值給成員變量。 為了更清晰的表達這個含義,為此***采用如下的書寫格式:this.name=name。這里的this關(guān)鍵字含義就 是對象名student。為此this.name就表示student.name。這就轉(zhuǎn)換為正規(guī)的成員變量應(yīng)用了。

應(yīng)用二:調(diào)用類的構(gòu)造方法

在一個Java類中,其方法可以分為成員方法和構(gòu)造方法兩種。構(gòu)造方法是一個與類同名的方法, 在Java類中必須存在一個構(gòu)造方法。如果在代碼中沒有顯示的體現(xiàn)構(gòu)造方法的話,那么編譯器在編譯的時 候會自動添加一個沒有形式參數(shù)的構(gòu)造方法。這個構(gòu)造方法跟普通的成員方法還是有很多不同的地方。如 構(gòu)造方法的話一律是沒有返回值的。而且也不用void關(guān)鍵字來說明這個構(gòu)造方法沒有返回值。而普通的方 法可以有返回值、也可以沒有返回值,程序員可以根據(jù)自己的需要來定義。不過如果普通的方法沒有返回 值的話,那么一定要在方法定義的時候采用void關(guān)鍵字來進行說明。其次構(gòu)造方法的名字有嚴格的要求, 即必須與類的名字相同。也就是說,Java編譯器發(fā)現(xiàn)有個方法與類的名字相同才把其當作構(gòu)造方法來對待 。而對于普通方法的話,則要求不能夠與類的名字相同,而且多個成員方法不能夠采用相同的名字。在一 個類中可以存在多個構(gòu)造方法,這些構(gòu)造方法都采用相同的名字。只是形式參數(shù)不同。Java語言就憑用戶 參數(shù)的參數(shù)來判斷調(diào)用那個構(gòu)造方法。
this關(guān)鍵字除了可以調(diào)用成員變量之外,還可以調(diào)用構(gòu)造方 法。如下面的代碼:

  1. public class Student{ //定義一個類,類的名字為student。   
  2.   public Student(){ //定義一個方法,名字與類相同故為構(gòu)造方法  
  3.  
  4.   this(“l(fā)uobo”)  
  5.    }  
  6.  
  7.   public Student(String name){ //定義一個帶形式參數(shù)的構(gòu)造方法  
  8.     }  

在上面這個代碼中,筆者定義了兩個構(gòu)造方法,一個帶參數(shù),另一個沒有帶參數(shù)。構(gòu) 造方法都不會有返回值,不過由于構(gòu)造方法的特殊性,為此不必要在構(gòu)造方法定義時帶上void關(guān)鍵字來說 明這個問題。在***個沒有帶參數(shù)的構(gòu)造方法中,筆者使用了this(“l(fā)uobo”)這個代碼。這個代碼表示 什么含義呢?在構(gòu)造方法中使this關(guān)鍵字表示調(diào)用類中的構(gòu)造方法。如果一個類中有多個構(gòu)造方法,因為 其名字都相同,跟類名一致,那么這個this到底是調(diào)用哪個構(gòu)造方法呢?其實,這跟采用其他方法引用構(gòu) 造方法一樣,都是通過形式參數(shù)來嗲用構(gòu)造方法的。如上例中,this關(guān)鍵字后面加上了一個參數(shù),那么就 表示其引用的是帶參數(shù)的構(gòu)造方法。如果現(xiàn)在有三個構(gòu)造方法,分別為不帶參數(shù)、帶一個參數(shù)、帶兩個參 數(shù)。那么Java編譯器會根據(jù)所傳遞的參數(shù)數(shù)量的不同,來判斷該調(diào)用哪個構(gòu)造方法。從上面這個示例中可 以看出,this關(guān)鍵字不僅可以用來引用成員變量,而且還可以用來引用構(gòu)造方法。

不過如果要使用這種方式來調(diào)用構(gòu)造方法的話,有一個語法上的限制。一般來說,利用this關(guān)鍵 字來調(diào)用構(gòu)造方法,只有在無參數(shù)構(gòu)造方法中***句使用this調(diào)用有參數(shù)的構(gòu)造方法。否則的話,翻譯的 時候,就會有錯誤信息。這跟引用成員變量不同。如果引用成員變量的話,this關(guān)鍵字是沒有位置上的限 制的。如果不熟悉這個限制的話,那么還是老老實實的采用傳統(tǒng)的構(gòu)造方法調(diào)用方式為好。雖然比較麻煩 ,但是至少不會出錯。

應(yīng)用三:返回對象的值

this關(guān)鍵字除了可以引用變量或者成員方法之外,還有一個重大的作用就是返回類的飲用。如在 代碼中,可以使用return this,來返回某個類的引用。此時這個this關(guān)鍵字就代表類的名稱。如這個代 碼在上面這個student類中,那么這個代碼其代表的含義就是return student??梢?,這個this關(guān)鍵字除 了可以引用變量或者成員方法之外,還可以做為類的返回值。這才是this關(guān)鍵字最引人注意的地方。

在使用this關(guān)鍵字的時候,需要注意一個細節(jié)問題。在筆者談到的***個案例中,利用this關(guān)鍵 字來引用成員變量。即this.name=name。這個語句是將局部變量或則形式參數(shù)賦值給成員變量。其實,此 時這個this關(guān)鍵字不加也可以起到類似的效果。即上面這個語句中,與name=name這個語句時相同的。即 Java編譯器會自動將***個name當作成員變量來對待。而將等號右邊的name變量當作形式參數(shù)。雖然這么 書寫代碼,可以節(jié)省this這幾個字符的輸入。但是對于代碼的閱讀是不利的。為此,從代碼的閱讀性考慮 ,如果成員變量與形式參數(shù)或者局部變量相同的話,那么***是使用this.成員變量(成員方法)的方式來 引用成員變量。雖然語法上沒有錯誤,但是作為一個高級的JAVA程序員,在代碼書寫的規(guī)范上,也不能夠 忽視。

【編輯推薦】

  1. Java中兩個特殊變量this和super 的使用
  2. 3.6.3 this關(guān)鍵字和構(gòu)造方法的調(diào)用
  3. 5.7.8 null和this關(guān)鍵字
  4. Java學習筆記-JSF
  5. 開發(fā)者體驗:Java抓取百度 Top500歌曲及源碼
責任編輯:仲衡 來源: IT專家網(wǎng)
相關(guān)推薦

2022-01-10 18:11:42

C語言應(yīng)用技巧

2009-08-13 17:44:34

C# using關(guān)鍵字

2015-11-10 16:10:22

C語言StaticConst

2009-11-30 10:23:35

fixed關(guān)鍵字

2010-01-26 14:35:11

C++關(guān)鍵字

2012-03-01 12:50:03

Java

2025-01-09 10:30:40

2010-02-05 15:51:06

C++ explici

2010-02-02 14:27:54

C++ static關(guān)

2011-02-25 14:42:10

SQLwith關(guān)鍵字

2023-03-24 08:01:27

Go語言內(nèi)存

2012-06-02 00:53:39

Javafinally

2020-08-10 08:00:13

JavaFinal關(guān)鍵字

2021-03-10 15:59:39

JavaSynchronize并發(fā)編程

2009-08-21 14:58:56

C# this關(guān)鍵字

2013-01-30 10:12:14

Pythonyield

2018-04-20 15:56:09

Pythonglobal關(guān)鍵字

2009-09-02 09:24:03

C# this關(guān)鍵字

2009-09-17 09:30:00

Linq LET關(guān)鍵字

2022-01-04 16:35:42

C++Protected關(guān)鍵字
點贊
收藏

51CTO技術(shù)棧公眾號