原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/11/28/2793257.html
前言
在一個執行個體方法或者是構造方法中,this引用指向當前的對象---方法調用或者是構造方法調用的對象。你可以在執行個體化方法或者構造方法中,使用this引用任何成員。
在欄位中使用this
使用this關鍵字的最常見的原因,是欄位被方法或建構函式的參數隱藏了。
例如,Point類是這樣寫的:
public class Point { public int x = 0; public int y = 0; //constructor public Point(int a, int b) { x = a; y = b; }}
但是它也可以這麼寫:
public class Point { public int x = 0; public int y = 0; //constructor public Point(int x, int y) { this.x = x; this.y = y; }}
構造方法的每個參數都隱藏了對象的欄位---在構造方法裡,x是構造方法的第一個參數的局部副本,引用Point欄位x,構造方法必須使用this.x.
在構造方法使用this
在構造方法裡,你可以使用this關鍵字調用類的另一個構造方法。這種是顯式構造方法調用。這裡有一個Rectangle類:
public class Rectangle { private int x, y; private int width, height; public Rectangle() { this(0, 0, 0, 0); } public Rectangle(int width, int height) { this(0, 0, width, height); } public Rectangle(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } ...}
這個類有一系列構造方法,每個構造方法初始化Rectangle
的部門變數。如果沒有為參數提供初始化值,構造方法為每個成員變數提供了預設值。例如,無參構造方法,傳入四個值為0的參數,調用四個參數的構造方法,還有兩個參數的構造方法,傳入兩個0的參數,調用四個參數的構造方法。之前說過,編譯器是根據參數的個數和類型,決定調用哪個構造方法。
如果存在,另一個建構函式的調用必須是建構函式中的第一行。