Java - 建構子

歡迎,未來的Java開發者!今天,我們將深入Java編程中最基本的概念之一:建構子。如果你是編程新手,不必擔心;我會一步步引導你了解這個主題,就像過去多年來我對無數學生所做的那樣。所以,來一杯咖啡(或你喜歡的飲料),我們一起踏上這個令人興奮的旅程吧!

Java - Constructors

建構子是什麼?

想象一下你正在建造一棟房子。在開始裝修之前,你需要打地基和建造基本的結構。在Java中,建構子就像創建對象的藍圖 - 它们在對象被創建時設定對象的初始狀態。

建構子是一個特殊的 方法,當創建一個類的對象時被調用。它用於初始化對象的狀態並為其分配記憶體。

關於建構子的重點:

  1. 建構子的名稱與類的名稱相同。
  2. 它們沒有返回類型(甚至不包括void)。
  3. 當創建對象時,它們會自動被調用。

讓我們看一個簡單的例子:

public class House {
String color;
int numberOfRooms;

// 這是一個建構子
public House() {
color = "白色";
numberOfRooms = 3;
}
}

在這個例子中,House()是一個建構子。它將任何新創建的House對象的默認顏色設為"白色",房間數設為3。

創建Java建構子的規則

現在我們已經奠定了基礎,讓我們來一些重要的規則來加強它:

  1. 建構子的名稱必須與類的名稱完全匹配。
  2. 建構子不能有返回類型(甚至不包括void)。
  3. 建構子可以具有訪問修飾符(public、private、protected或默認)。
  4. 如果你沒有提供任何建構子,Java會為你創建一個默認的無參數建構子。

創建Java建構子

讓我們創建一個更詳細的例子來說明如何創建和使用建構子:

public class Student {
String name;
int age;
String major;

// 建構子
public Student(String studentName, int studentAge, String studentMajor) {
name = studentName;
age = studentAge;
major = studentMajor;
}

// 方法來顯示學生信息
public void displayInfo() {
System.out.println("姓名: " + name);
System.out.println("年齡: " + age);
System.out.println("主修: " + major);
}

public static void main(String[] args) {
// 創建一個新的Student對象
Student newStudent = new Student("Alice", 20, "電腦科學");
newStudent.displayInfo();
}
}

在這個例子中,我們創建了一個帶有三個參數的Student類和建構子。當我們創建一個新的Student對象時,我們傳入所需的信息,建構子初始化對象的狀態。

如果你運行這段代碼,你將會看到:

姓名: Alice
年齡: 20
主修: 電腦科學

Java建構子的類型

就像有不同的房子類型(平房、公寓、豪宅),Java中也有不同類型的建構子。讓我們來探索它們:

1. 默認建構子

如果你沒有提供任何建構子,Java會為你創建一個。這稱為默認建構子。

public class Car {
// Java將在這裡創建一個默認建構子
}

// 使用
Car myCar = new Car();

2. 無參數建構子

這是一個不接收任何參數的建構子。

public class Bicycle {
String color;

// 無參數建構子
public Bicycle() {
color = "紅色";
}
}

// 使用
Bicycle myBike = new Bicycle();

3. 帶參數建構子

這種類型的建構子接受一個或多個參數。

public class Book {
String title;
String author;

// 帶參數建構子
public Book(String bookTitle, String bookAuthor) {
title = bookTitle;
author = bookAuthor;
}
}

// 使用
Book myBook = new Book("了不起的蓋茨比", "F. Scott Fitzgerald");

Java中的建構子重載

記得我提到過不同類型的房子嗎?有時你可能想要以不同的方式創建對象。這就是建構子重載派上用場的地方。

建構子重載允許一個類有多個建構子。每個建構子可以有不同的參數列表。這提供了對象創建的靈活性。

讓我們看一個例子:

public class Pizza {
String size;
String topping;
boolean extraCheese;

// 帶所有參數的建構子
public Pizza(String pizzaSize, String pizzaTopping, boolean hasExtraCheese) {
size = pizzaSize;
topping = pizzaTopping;
extraCheese = hasExtraCheese;
}

// 帶尺寸和餡料的建構子
public Pizza(String pizzaSize, String pizzaTopping) {
this(pizzaSize, pizzaTopping, false); // 調用第一個建構子
}

// 只帶尺寸的建構子
public Pizza(String pizzaSize) {
this(pizzaSize, "瑪格麗塔", false); // 調用第一個建構子
}

// 方法來顯示披薩信息
public void displayInfo() {
System.out.println("尺寸: " + size);
System.out.println("餡料: " + topping);
System.out.println(" extra Cheese: " + (extraCheese ? "是" : "否"));
}

public static void main(String[] args) {
Pizza pizza1 = new Pizza("大", "辣香腸", true);
Pizza pizza2 = new Pizza("中", "蘑菇");
Pizza pizza3 = new Pizza("小");

System.out.println("披薩1:");
pizza1.displayInfo();
System.out.println("\n披薩2:");
pizza2.displayInfo();
System.out.println("\n披薩3:");
pizza3.displayInfo();
}
}

這個Pizza類演示了建構子重載。我們有三個建構子,每個都有不同的參數列表。這允許我們以不同的方式創建Pizza對象,為我們的類的使用者提供靈活性。

當你運行這段代碼時,你將會看到:

披薩1:
尺寸: 大
餡料: 辣香腸
extra Cheese: 是

披薩2:
尺寸: 中
餡料: 蘑菇
extra Cheese: 否

披薩3:
尺寸: 小
餡料: 瑪格麗塔
extra Cheese: 否

以上就是了!我們從頭開始建立了對Java建構子的堅實理解。記住,練習成就完美。嘗試創建自己的類並實驗不同類型的建構子。在你意識到之前,你將能夠像專業人士一樣構建Java對象!

編程愉快,未來的Java大師们!??‍??‍?

Credits: Image by storyset