前言
java
this調用屬性
編程
class Student{ private String name; private int age; public Student(String name, int age){ } }
在構造函數中賦值的時候,會很容易寫成下面這樣:函數
class Student{ private String name; private int age; public Student(String name, int age){ name = name; age = age; } }
若寫成這樣,當構造Student這個對象並輸出該對象的姓名和年齡時會發現,name爲null, age爲0。
形成這樣的緣由是由於有局部可見性。一般使用{}括起來的一個數據塊叫作一個做用域範圍。在同一個做用域範圍定義了兩個同名的變量則會報錯;如果在該做用域定義了一個與該做用域範圍以外同名的變量則是能夠的,在這個做用域同時使用這兩個變量,則在這個做用域中定義的變量會屏蔽做用域範圍以外的那個變量,即做用域中定義的變量纔會有效。
這樣說完感受有點繞。一句話來講,在同一做用域內,做用範圍小的變量會屏蔽同名的做用範圍大的變量。
如果想要Student類中的屬性能夠被正確初始化,那麼則須要使用this關鍵字。學習
class Student{ private String name; private int age; public Student(String name, int age){ this.name = name; this.age = age; } }
在咱們編程時,訪問類的屬性最好使用this。this
this調用方法
code
在本類的普通函數中調用其餘普通函數,能夠在函數前面加上this也能夠不加,可是爲了代碼嚴謹性推薦加上this。
對象
構造函數之間能夠相互調用,構造函數之間相互調用就必定須要使用this關鍵字!
使用this()表示調用無參構造函數,this(參數,...)表示調用有參構造函數blog
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 */
構造函數之間爲何要相互調用呢?
由於要減小構造函數中代碼的重複問題,提升代碼的重用性。因此,構造函數之間相互能夠調用也就理所固然了。
構造函數之間相互調用有一些限制須要注意:
遞歸
this表示當前對象
作用域
因此前面使用this.屬性也就很容易理解了,就是當前對象的屬性。
小結