什麼是 Java 構造器?

什麼是 Java 構造器?

構造器是編程的強大組件。使用它們來釋放 Java 的全部潛力。

-- Seth Kenlon(作者)

在開源、跨平臺編程領域,Java 無疑(?)是無可爭議的重量級語言。儘管有許多 偉大的跨平臺 框架 ,但很少有像 Java 那樣統一和直接的。

當然,Java 也是一種非常複雜的語言,具有自己的微妙之處和慣例。Java 中與 構造器( constructor)有關的最常見問題之一是:它們是什麼,它們的作用是什麼?

簡而言之:構造器是在 Java 中創建新 對象(object)時執行的操作。當 Java 應用程序創建一個你編寫的類的實例時,它將檢查構造器。如果(該類)存在構造器,則 Java 在創建實例時將運行構造器中的代碼。這幾句話中包含了大量的技術術語,但是當你看到它的實際應用時就會更加清楚,所以請確保你已經 安裝了 Java 並準備好進行演示。

沒有使用構造器的開發日常

如果你正在編寫 Java 代碼,那麼你已經在使用構造器了,即使你可能不知道它。Java 中的所有類都有一個構造器,因為即使你沒有創建構造器,Java 也會在編譯代碼時為你生成一個。但是,為了進行演示,請忽略 Java 提供的隱藏構造器(因為默認構造器不添加任何額外的功能),並觀察沒有顯式構造器的情況。

假設你正在編寫一個簡單的 Java 擲骰子應用程序,因為你想為遊戲生成一個偽隨機數。

首先,你可以創建骰子類來表示一個骰子。你玩了很久 《龍與地下城》 ,所以你決定創建一個 20 面的骰子。在這個示例代碼中,變量 dice 是整數 20,表示可能的最大擲骰數(一個 20 邊骰子的擲骰數不能超過 20)。變量 roll 是最終的隨機數的佔位符,rand 用作隨機數種子。

import java.util.Random;
public class DiceRoller {
private int dice = 20;
private int roll;
private Random rand = new Random();

接下來,在 DiceRoller 類中創建一個函數,以執行計算機模擬模子滾動所必須採取的步驟:從 rand 中獲取一個整數並將其分配給 roll變量,考慮到 Java 從 0 開始計數但 20 面的骰子沒有 0 值的情況,roll 再加 1 ,然後打印結果。

import java.util.Random;
public class DiceRoller {
private int dice = 20;
private int roll;
private Random rand = new Random();

最後,產生 DiceRoller 類的實例並調用其關鍵函數 Roller:

// main loop
public static void main (String[] args) {
System.out.printf("You rolled a ");

DiceRoller App = new DiceRoller();
App.Roller();
}
}

只要你安裝了 Java 開發環境(如 OpenJDK ),你就可以在終端上運行你的應用程序:

$ java dice.java
You rolled a 12

在本例中,沒有顯式構造器。這是一個非常有效和合法的 Java 應用程序,但是它有一點侷限性。例如,如果你把遊戲《龍與地下城》放在一邊,晚上去玩一些《快艇骰子》,你將需要六面骰子。在這個簡單的例子中,更改代碼不會有太多的麻煩,但是在複雜的代碼中這不是一個現實的選擇。解決這個問題的一種方法是使用構造器。

構造函數的作用

這個示例項目中的 DiceRoller 類表示一個虛擬骰子工廠:當它被調用時,它創建一個虛擬骰子,然後進行“滾動”。然而,通過編寫一個自定義構造器,你可以讓擲骰子的應用程序詢問你希望模擬哪種類型的骰子。

大部分代碼都是一樣的,除了構造器接受一個表示面數的數字參數。這個數字還不存在,但稍後將創建它。

import java.util.Random;
public class DiceRoller {
private int dice;
private int roll;
private Random rand = new Random();
// constructor
public DiceRoller(int sides) {
dice = sides;
}

模擬滾動的函數保持不變:

public void Roller() {
roll = rand.nextInt(dice);
roll += 1;
System.out.println (roll);
}

代碼的主要部分提供運行應用程序時提供的任何參數。這的確會是一個複雜的應用程序,你需要仔細解析參數並檢查意外結果,但對於這個例子,唯一的預防措施是將參數字符串轉換成整數類型。

public static void main (String[] args) {
System.out.printf("You rolled a ");
DiceRoller App = new DiceRoller( Integer.parseInt(args[0]) );
App.Roller();
}

啟動這個應用程序,並提供你希望骰子具有的面數:

$ java dice.java 20
You rolled a 10
$ java dice.java 6
You rolled a 2
$ java dice.java 100
You rolled a 44

構造器已接受你的輸入,因此在創建類實例時,會將 sides 變量設置為用戶指定的任何數字。

構造器是編程的功能強大的組件。練習用它們來解開了 Java 的全部潛力。


via: https://opensource.com/article/19/6/what-java-constructor

作者: Seth Kenlon 選題: lujun9972 譯者: laingke 校對: wxy

本文由 LCTT 原創編譯, Linux中國 榮譽推出


分享到:


相關文章: