Java裏this的做用和用法

       this, 一個官方的說法是,this首先是一個對象,它表明調用這個函數的對象函數

根據面向對象的基本語法,每當調用變量或者函數的時候,都要按照類名.變量(函數)的格式來調用,意即每一個變量或函數都必須屬於某一個實際的對象而不是一個類(static的除外).
       在不會產生混淆的地方, this是能夠省略的,但通常都會加上,(Think in Java裏面說最好不要加,由於你們都不加)this

例如,下面的程序中,類"Person"裏面加與不加 this 編譯運行後的結果是同樣的:spa

 1 package testThis;  2 
 3 public class Test {  4     public static void main(String args[]){  5         Person p1 = new Person();  6         p1.name = "zhangsan";  7         Person p2 = new Person();  8         p2.name = "lisi";  9         
10  p1.talk(); 11  p2.talk(); 12  } 13 } 14 
15 class Person{ 16  String name; 17     void talk(){ 18         System.out.println("My name is " + this.name); 19  } 20 }

 上面的代碼裏第18行,無論是"this.name"仍是"name",運行的結果都是:3d

My name is zhangsan
My name is lisicode

 由於前面已經把p1和p2裏面的name變量賦值,因此執行方法的時候,都會打印出它們各自的數據.對象

可是,當函數裏面有參數時,若是函數的參數和成員變量同樣,這時不加this的話,程序就會根據"就近原則",自動調用最近的值,以下面的代碼:   上面已經把對象p1和p2裏面的變量name分別賦值爲"zhangsan"和"lisi",但類"Person"裏面的方法"talk"如今有了參數"String name",並且沒有加"this",這時若是運行這個方法,方法就會接收後面參數傳送給它的值,分別是"zhang"和"li",這時運行結果就會是:blog

My name is zhang
My name is li編譯

因此,這裏雖然對象p1和p2各有本身的變量 name,但它們調用的方法接收的倒是參數裏面的值,(從系統裏各變量的顏色背景也可心看出對應的變量),而不是它們本身自己的值.因此這裏輸出的結果跟它們本身內部的值無關.class

若是想要在它們各自調用talk()方法時分別輸出本身內部的值,則須要在類 "Person"裏面的方法"talk"里加上"this",這樣,當它們各自調用這個方法時,輸出的結果都是它們各自內部變量的值了:test

 

 

上面介紹的是用this來調用自己對象的變量和函數,this還有一個重要的做用就是用來調用構造函數.能夠用來精簡代碼.好比下例,若是咱們的類裏面有多個構造函數,分別給不一樣的變量賦值,就可能會產生重複代碼,爲了解決這些重複代碼,就能夠用this(變量)的方式,來調用另外一個構造函數,來給變量賦值.

    

相關文章
相關標籤/搜索