什麼是構造方法?¶
在Java中,構造方法是一種特殊的方法,它的主要作用是初始化對象。當我們使用 new 關鍵字創建一個對象時,構造方法會被自動調用,用來給對象的成員變量(比如屬性)賦初始值。
構造方法的特點:¶
- 名字和類名完全相同:比如類名爲
Person,構造方法也必須叫Person。 - 沒有返回值類型:包括
void都不能寫,這是構造方法最明顯的特徵。 - 不能被
static、final、abstract修飾:它是爲實例(對象)服務的,和對象創建過程強綁定。 - 自動調用:當使用
new創建對象時,構造方法會自動執行,不需要手動調用。
構造方法的作用:初始化對象¶
構造方法的核心任務是給對象的成員變量賦初始值。比如我們定義一個 Person 類,可能有 name 和 age 兩個屬性,構造方法就可以在創建對象時直接設置這兩個屬性的值。
例子:簡單的構造方法¶
class Person {
// 成員變量(屬性)
String name;
int age;
// 無參構造方法:沒有參數,創建對象時自動調用
Person() {
name = "未知";
age = 0;
System.out.println("調用無參構造方法,初始化默認值");
}
// 有參構造方法:帶參數,創建對象時傳遞參數初始化
Person(String n, int a) {
name = n;
age = a;
System.out.println("調用有參構造方法,設置名字和年齡");
}
}
使用構造方法創建對象:¶
public class Test {
public static void main(String[] args) {
// 調用無參構造方法,創建對象p1
Person p1 = new Person();
// 調用普通方法(後面會講區別)
p1.showInfo();
// 調用有參構造方法,創建對象p2,傳遞參數"張三"和20
Person p2 = new Person("張三", 20);
p2.showInfo();
}
}
關鍵點:¶
- 無參構造方法:如果類中沒有定義任何構造方法,Java會自動提供一個默認的無參構造方法(但如果自己寫了有參構造,默認無參構造會消失)。
- 有參構造方法:可以在創建對象時靈活設置屬性值,滿足不同場景的初始化需求。
構造方法 vs 普通方法:核心區別¶
構造方法和普通方法(我們通常說的“成員方法”)看起來類似,但本質功能完全不同。
| 對比項 | 構造方法 | 普通方法 |
|---|---|---|
| 命名規則 | 必須和類名完全相同 | 可以自定義名稱,但通常用動詞開頭 |
| 返回值 | 沒有返回值(連 void 都不能寫) |
必須有返回值類型(void 或其他類型) |
| 調用時機 | 創建對象時自動調用(new 時) |
需要手動調用(對象.方法名()) |
| 作用 | 負責初始化對象(給屬性賦值) | 定義對象的行爲(比如說話、跑步) |
| 修飾符 | 不能用 static、final 等修飾 |
可以用 static、public、private 等 |
| 能否被繼承 | 不能被繼承(因爲是對象初始化用的) | 可以被繼承和重寫(覆蓋) |
例子:構造方法 vs 普通方法¶
class Person {
String name;
int age;
// 構造方法:初始化對象
Person(String n, int a) {
name = n;
age = a;
}
// 普通方法:定義對象行爲
void introduce() {
System.out.println("我叫" + name + ",今年" + age + "歲");
}
}
public class Test {
public static void main(String[] args) {
// 1. 構造方法:new時自動調用,初始化對象
Person p = new Person("李四", 18);
// 2. 普通方法:手動調用,對象.方法名()
p.introduce(); // 輸出:我叫李四,今年18歲
}
}
常見問題 & 注意事項¶
- 默認構造方法被覆蓋:
如果類中定義了有參構造方法,Java不會再提供默認的無參構造方法。例如:
class Person {
// 這裏只定義了有參構造,沒有無參構造
Person(String n, int a) { ... }
}
// 此時以下代碼會報錯!因爲默認無參構造方法被覆蓋了
Person p = new Person();
-
構造方法不能單獨調用:
構造方法只能在new創建對象時自動調用,不能像普通方法那樣寫p.構造方法名(),會編譯報錯。 -
構造方法可以重載:
一個類中可以定義多個構造方法(參數列表不同),這叫“構造方法重載”。例如:
class Person {
String name;
int age;
// 無參構造
Person() { ... }
// 有參構造(1個參數)
Person(String n) { ... }
// 有參構造(2個參數)
Person(String n, int a) { ... }
}
總結¶
- 構造方法:和類名相同,無返回值,創建對象時自動調用,用於初始化對象屬性。
- 普通方法:自定義名稱,有返回值,需手動調用,用於定義對象的行爲。
理解兩者的區別後,你就能在Java中正確使用構造方法初始化對象,避免常見的“構造方法調用錯誤”或“忘記初始化屬性”的問題。
小練習:嘗試定義一個 Student 類,包含姓名、學號、班級三個屬性,並用構造方法和普通方法實現對象初始化和信息輸出。