java中this關鍵字的作用


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM