簡體   English   中英

Java 構造函數 - 如何創建它們

[英]Java Constructors - how to create them

我目前正在學習 Java,我對 Java 中的構造函數有疑問。 在學習時,我有時會看到構造函數的寫法不同,如我的 2 個示例所示。 您能否解釋一下這兩個之間有什么區別以及為什么要使用其中一個。 一種是使用“這個”。 而另一個不是,這讓我很困惑。 有沒有合適的方法來寫這個。

例1

public class Dog {
  String breed;
  boolean hasOwner;
  int age;
    
  public Dog(String dogBreed, boolean dogOwned, int dogYears) {
    
    breed = dogBreed;
    hasOwner = dogOwned;
    age = dogYears;
   

例2

public class Dog {
  String breed;
  boolean hasOwner;
  int age;
    
  public Dog(String dogBreed, boolean dogOwned, int dogYears) {
    
    this.breed = dogBreed;
    this.hasOwner = dogOwned;
    this.age = dogYears;

盡管它們(上面的示例)都做同樣的事情,但是用this關鍵字引用實例變量總是好的。

this只不過是對 class 的自我 object 的引用。 希望您已經了解 Java 和 Object 面向原則的基礎知識,在 Java 中,所有內容都稱為對象。 即使您嘗試訪問變量,您也必須通過創建實例(即簡單來說 object)通過對象來完成。 回到你的例子,因為你正在設置實例變量,你應該通過引用this關鍵字來使用。 換句話說,您明確表示class 的實例變量應使用作為參數傳遞的數據進行設置。

我還想指出一件事。 我看到在示例 2 中,您更改了構造函數的參數只是為了確保 Java 不會與實例變量和參數混淆。 但是在這樣做的同時,您改變了參數的含義或描述性意圖。 這本可以避免,如下所示 -

public class Dog {
  String breed;
  boolean hasOwner;
  int age;
    
  public Dog(String breed, boolean hasOwner, int age) {
    
    this.breed = breed;    
    this.hasOwner = hasOwner;
    this.age = age;

    // Any this.variables are referred as the instance  variables and the ones
    // without the this are referred as the parameters. 
  }
}

我希望您現在已經理解了this關鍵字的用途。 請記住this不僅限於變量,還可以與方法一起使用。 只要您記住this只是對自我的引用,您就永遠不會感到困惑。

這是非常基本的,但為了做出正確的決定,您可以考慮了解this的流行含義。

在您給定的示例中,無論是否使用this都很好,但 2. 示例由於以下原因而過度殺傷:我們使用this來指代我們正在創建的 Object。 在您的示例 2 中, this和 Dog 我們可以說它們在該上下文中是相同的。 所以說: Dog chien = new Dog(...); 在 class Dog 內部,使用thischien或您創建的任何其他Dog object 相同。

那么為什么要使用this呢? 一個基本原因是為構造函數或方法提供了參數,以防您將它們命名為與屬性相同的名稱。

例如,您可以這樣做:

public class Dog { 
            String breed; 
            boolean hasOwner;
            int age; 
     
  public Dog(String breed, boolean hasOwner, int age) { 
             this.breed = breed;
             this.hasOwner = hasOwner;
             this.age = age;

這和您的示例 1 一樣有效。有了this ,您表明您想要為 Dog 的屬性分配一個值,該值作為參數給出。 否則,您可以避免編寫像breed = breed這樣的歧義。

總而言之,如果您的參數名稱與屬性名稱不同,則不需要使用this ,因此不需要示例 1 和 2 都可以,但在 2 中不需要它,例如1剛剛好。 然而,對於 java 中的更多概念,習慣於將this作為 object 的自我參考是一個很好的做法。 這可能有助於您更好地了解 java 中未來有用的東西。

在 Java 中,構造函數是與方法類似的代碼塊。 在創建 class 的實例時調用它。 在調用構造函數時,memory中分配了object的memory。

這是一種特殊的方法,用於初始化 object。 每次使用 new() 關鍵字創建 object 時,都會調用至少一個構造函數。

關鍵字this是 Java 中的引用變量,它引用當前的 object。 當我們在構造函數中使用與定義的變量相似的相同參數時,我們在構造函數中使用 this 關鍵字。

public class Dog {
String breed;
boolean hasOwner;
int age;

public Dog(String dogBreed, boolean dogOwned, int dogYears) {

  this.breed = dogBreed;
  this.hasOwner = dogOwned;
  this.age = dogYears;

當您使用時,分配參數的值。

public class Dog{
    String breed;
    boolean hasOwner;
    int age;
    public Dog(String dogBreed, boolean dogOwned, int dogYears){
        this.breed = dogBreed;
        this.hasOwner = dogOwned;
        this.age = dogYears;
    }
}

所以現在,如果你不使用 java 的“this”關鍵字,當你嘗試使用你的局部變量並且你 output 顯示為零或依賴時,編譯器將無法理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM