<font color="Teal"><b>前言</b></font>編程
<hr> this關鍵字屬於Java中比較複雜的關鍵字之一,如果學習過C++或者其餘的一些面嚮對象語言也會遇到this這個關鍵字而且都會看到this的含義就是表示當前對象。什麼叫作表示當前對象?this在Java中的用法是怎樣的呢?將分爲下面幾點介紹。函數
- this調用屬性
- this調用方法
- this表示當前對象
<br> <font color="Teal"><b>this調用屬性</b></font> <hr> 當咱們寫參構造函數時,會傾向於將形參名取與將要賦值的屬性名相同,這樣就更容易看見形參就知道它是給哪一個屬性賦值。學習
class Student{ private String name; private int age; public Student(String name, int age){ } }
在構造函數中賦值的時候,會很容易寫成下面這樣:this
class Student{ private String name; private int age; public Student(String name, int age){ name = name; age = age; } }
若寫成這樣,當構造Student這個對象並輸出該對象的姓名和年齡時會發現,name爲null, age爲0。<br> 形成這樣的緣由是由於有<b>局部可見性</b>。一般使用{}括起來的一個數據塊叫作一個做用域範圍。在同一個做用域範圍定義了兩個同名的變量則會報錯;如果在該做用域定義了一個與該做用域範圍以外同名的變量則是能夠的,在這個做用域同時使用這兩個變量,則在這個做用域中定義的變量會屏蔽做用域範圍以外的那個變量,即做用域中定義的變量纔會有效。<br> 這樣說完感受有點繞。一句話來講,<u>在同一做用域內,做用範圍小的變量會屏蔽同名的做用範圍大的變量。</u><br> 如果想要Student類中的屬性能夠被正確初始化,那麼則須要使用this關鍵字。code
class Student{ private String name; private int age; public Student(String name, int age){ this.name = name; this.age = age; } }
在咱們編程時,訪問類的屬性最好使用this。對象
<br> <font color="Teal"><b>this調用方法</b></font> <hr> this不只能夠調用類中的屬性還能夠調用類中的方法。<br> 類中的方法有普通方法和構造方法。blog
-
在本類的普通函數中調用其餘普通函數,能夠在函數前面加上this也能夠不加,可是爲了代碼嚴謹性推薦加上this。<br>遞歸
-
普通方法中不能夠調用構造函數,構造函數的調用只能出如今第一次建立對象爲對象進行初始化時調用!<br>作用域
-
在構造函數中調用普通方法,通常不推薦調用在方法內部使用了屬性的普通方法。由於構造函數尚未執行完,屬性沒有被徹底初始化,這時使用屬性可能會出現異常。<br>class
-
構造函數之間能夠相互調用,構造函數之間相互調用就必定須要使用this關鍵字!<br> 使用this()表示調用無參構造函數,this(參數,...)表示調用有參構造函數
public class Student{ private String name = null; private int age = 0; public Student() { System.out.println("Student():name="+name+",age="+age); } public Student(String name, int age) { this(); //若使用Student()則會報錯:沒有定義這個方法。被當作普通方法來解釋 this.name = name; this.age = age; System.out.println("Student(String name, int age):name="+name+",age="+age); } public static void main(String[] args) { Student stu = new Student("Sakura",20); } } /* output: Student():name=null,age=0 Student(String name, int age):name=Sakura,age=20 */
<b>構造函數之間爲何要相互調用呢?</b><br> 由於要減小構造函數中代碼的重複問題,提升代碼的重用性。因此,構造函數之間相互能夠調用也就理所固然了。<br> <b>構造函數之間相互調用有一些限制須要注意:</b><br>
- this()或者this(參數,...)須要被放在構造函數內部的首行
- 進行構造方法相互調用的時候,必定要保留調用的出口!<br> 至少保留相互調用之間的一個構造函數沒有使用this調用其餘構造函數,此構造函數做爲出口。避免遞歸調用!
<br> <font color="Teal"><b>this表示當前對象</b></font> <hr> 咱們須要知道同一個類的對象它們的<b>屬性是屬於不一樣空間的</b>,可是這些對象是<b>共享類中的方法</b>。因此它們須要一種方式代表是它們本身在調用該方法而不是其餘的對象。 因此,<font color="Crimson">當對象調用方法時,該對象會做爲一個隱含實參傳入到非靜態方法中,在非靜態方法中使用this來指向它,代表是它在調用該方法</font>。<br> 查看下面例子,能夠發現this就是指向的是當前正在調用類中方法的對象。 
因此前面使用this.屬性也就很容易理解了,就是當前對象的屬性。
<br> <font color="Teal"><b>小結</b></font> <hr> 介紹了Java中this主要使用的三個方面:①類中的屬性調用要加上this:this。屬性的方式。②this用來構造函數之間的相互調用,必定要保留調用出口③this表示當前對象,指的是當前正在調用類方法的對象。