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
}
}
