天天看點

揭開this的神秘面紗-屬性篇 | 帶你學《Java面向對象程式設計》之七

上一篇:3分鐘速懂匿名對象 | 帶你學《Java面向對象程式設計》之六

【本節目标】

通過閱讀本節内容,能夠讓你初步了解到作用域的概念,了解this的多種用途,學會使用this進行類内屬性的通路。

this調用本類屬性

this可以算是Java中比較複雜的關鍵字,因為this的使用形式上決定了它的靈活性,在程式裡面,使用this可以實作以下三類結構的描述:

  • 目前類中的屬性:this.屬性;
  • 目前類中的方法(普通方法、構造方法):this()、this.方法名稱();
  • 描述目前對象;

通過現在的分析可以發現,利用構造方法或者是setter方法都可以進行類中的屬性的指派,在進行指派的時候,之前采用的是如下的定義形式:

class Person{
   private String name ;
   private int age ;
   public Person(String n ,int a){
    name = n ;
    age = a ;
  }
  public void tell(){
    System.out.println(“姓名:”+ name + “、年齡:”+ age );
  }
//setter、getter略
}  
public class JavaDemo {          //主類
    public static void main(String args[]) {
      Person per = new person(“王五” ,38) ;
      per.tell() ;
   }
}           
揭開this的神秘面紗-屬性篇 | 帶你學《Java面向對象程式設計》之七

圖一 執行結果一

但是我們在構造方法定義的過程中會發現有問題:

public Person(String n ,int a){
    name = n ;
    age = a ;
}           

這個問題出現在參數名稱上,可以發現,此時構造方法中兩個參數的目的是為了類中的name或age屬性初始化,但是,現在卻發現此時的代碼n和a參數名稱不好。

public Person(String name ,int age){
    name = name ;
    age = age ;
}           
揭開this的神秘面紗-屬性篇 | 帶你學《Java面向對象程式設計》之七

圖二 執行結果二

如果說現在将構造方法中的參數名稱修改為name、age,則發現無法進行屬性的正确設定:

在Java程式之中“{}”是作為一個結構體的邊界符,那麼在程式裡面當進行變量(參數、屬性)使用的時候,都會以“{}”作為一個查找邊界,是以按照就近取用的原則,此時的構造方法并沒有能夠通路類中的屬性,是以此時為了明确的标記出類中的屬性與參數的差別,往往會在屬性前追加一個“this”,表示本類屬性。

class Person{
   private String name ;
   private int age ;
   public Person(String name ,int age){
    this.name = name ;
    this.age = age ;
   }
  public void tell(){
    System.out.println(“姓名:”+ this.name + “、年齡:”+ this.age );
  }
//setter、getter略
}  
public class JavaDemo {          //主類
    public static void main(String args[]) {
      Person per = new person(“王五” ,38) ;
      per.tell() ;
    }
}           
揭開this的神秘面紗-屬性篇 | 帶你學《Java面向對象程式設計》之七

圖三 執行結果三

在以後的程式開發過程中,隻要是通路本類中屬性,請一定要加上“this”實作通路。

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:揭開this的神秘面紗-方法篇 | 帶你學《Java面向對象程式設計》之八 更多Java面向對象程式設計文章檢視此處