日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JAVA中的this怎么理解_Java中的this关键字怎么理解?

發(fā)布時間:2023/12/19 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA中的this怎么理解_Java中的this关键字怎么理解? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、this關(guān)鍵字主要有三個應用:

(1)this調(diào)用本類中的屬性,也就是類中的成員變量;

(2)this調(diào)用本類中的其他方法;

(3)this調(diào)用本類中的其他構(gòu)造方法,調(diào)用時要放在構(gòu)造方法的首行。

Public Class Student {

String name; //定義一個成員變量name

private void SetName(String name) { //定義一個參數(shù)(局部變量)name

this.name=name; //將局部變量的值傳遞給成員變量

}

}

應用一:引用成員變量

如上面這段代碼中,有一個成員變量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語言中的最簡單的應用。從這個應用中,我們可以看出this關(guān)鍵字其代表的就是對象的名字。

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

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

public class Student { //定義一個類,類的名字為student。

public Student() { //定義一個方法,名字與類相同故為構(gòu)造方法

this(“Hello!”);

}

public Student(String name) { //定義一個帶形式參數(shù)的構(gòu)造方法

}

}

this關(guān)鍵字除了可以調(diào)用成員變量之外,還可以調(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ù)不同來判斷調(diào)用那個構(gòu)造方法。

在上面這段代碼中,定義了兩個構(gòu)造方法,一個帶參數(shù),另一個沒有帶參數(shù)。構(gòu)造方法都不會有返回值,不過由于構(gòu)造方法的特殊性,為此不必要在構(gòu)造方法定義時帶上void關(guān)鍵字來說明這個問題。在第一個沒有帶參數(shù)的構(gòu)造方法中,使用了this(“Hello!”)這句代碼,這句代碼表示什么含義呢?在構(gòu)造方法中使this關(guān)鍵字表示調(diào)用類中的構(gòu)造方法。如果一個類中有多個構(gòu)造方法,因為其名字都相同,跟類名一致,那么這個this到底是調(diào)用哪個構(gòu)造方法呢?其實,這跟采用其他方法引用構(gòu)造方法一樣,都是通過形式參數(shù)來調(diào)用構(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)用方式為好。雖然比較麻煩,但是至少不會出錯。

應用三:返回對象的值

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

總結(jié)

以上是生活随笔為你收集整理的JAVA中的this怎么理解_Java中的this关键字怎么理解?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。