[英]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 內部,使用this
與chien
或您創建的任何其他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.