1.當成員變量和局部變量重名時,在方法中使用this時,表示的是該方法所在類中的成員變量。(this指向當前對象自己)。
如果在方法內局部變量的命名與實例變量的命名相同,根據內部屏蔽外部的原則,實例變量在這個方法內暫時失效。這時如果想在該方法中使用實例變量,則需要在變量名前顯示的加上"this.",用來指明此變量是實例變量。默認格式如下(前者指向的是實例變量,后者指向的是局部變量):this.變量名=變量名。
package test; public class ThisKeyTest { String s = "Hello"; public ThisKeyTest(String s) { //構造方法中的參數,與類中成員變量重名. System.out.println("s = " + s); //HelloWorld! //當成員變量和局部變量重名時,在方法中使用this時,表示的是該方法所在類中的成員變量。 System.out.println("1 -> this.s = " + this.s); //Hello //把參數值賦給成員變量,成員變量的值改變 this.s = s; System.out.println("2 -> this.s = " + this.s); //HelloWorld! } public static void main(String[] args) { ThisKeyTest x = new ThisKeyTest("HelloWorld!"); //驗證成員變量值的改變 System.out.println("**s=" + x.s); } }
this指向當前對象自己,使用this時相當於指向了一個該類的實例對象。
2.在一個構造器中調用另一個構造器
class Student{ String name; int age; public Student(String name){ this("小明",19); } public Student(String name,int age){ this.name=name; this.age=age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } }
public class ThisKeyTest {
public static void main(String[] args) {
Student s=new Student("小紅");
System.out.println(s); //Student [name=小明, age=19]
}
}
Student類中定義了兩個構造方法,第一個構造方法只有name參數,第二個構造方法有name和age參數,如果想在第一個構造方法中調用第二個構造方法,可以使用this調用,調用時要放在構造方法的首行,直接使用構造方法名(參數名1,參數名2)(比如Student("小明",19);)調用顯示出錯。
3.當需要返回當前對象的引用時,常常使用return this。
這種做法的好處是:當你使用一個對象調用該方法,該方法返回的是經過修改后的對象,且又能使用該對象做其他的操作。因此很容易對一個對象進行多次操作。
package test; class Student{ String name; int age; public Student(String name){ this("小明",19); } public Student(String name,int age){ this.name=name; this.age=age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } public Student AgeIncrement(){ age+=2; return this; } public void print(){ System.out.println("age="+age); } } public class ThisKeyTest { public static void main(String[] args) { Student s=new Student("小紅"); s.AgeIncrement().AgeIncrement().print(); //age=23 } }