Java 類別使用指南:欄位、方法、實例化,一次搞懂怎麼用【Thinking in Java筆記(1-2)】
想搞懂 Java 的class
到底在幹嘛嗎?這篇讓你從頭到尾看懂類別是什麼、怎麼用、為什麼你的null
會出現錯誤
什麼是 Java 的「類別」?
想像你在玩積木,而類別(Class)就是你設計好的一組模版,例如「小車車模組」。每次想蓋一台車,只需要根據這個模版照做,就能快速產出
在 Java 中,類別就是用來創造「物件」的模版。它定義了一個物件會有哪些資料(欄位),以及能做哪些事(方法)
例如:
class Dog {
String name; // 每隻狗的名字
void bark() {
System.out.println("汪汪!"); // 每隻狗都會叫
}
}
這裡定義了一種「狗」的類別。每隻狗都會有名字,並且會叫。這只是模版,還沒真的產生一隻狗
創造一隻狗並使用它的方法:
Dog myDog = new Dog();
myDog.name = "小黑";
myDog.bark();
你就創造了一隻名叫「小黑」的狗,然後叫牠叫一聲。這就是物件導向程式設計的第一步:使用類別模版創造物件
如何定義一個類別
class ATypeName {
// 這裡放欄位與方法
}
然後用 new
來創造它的實例:
ATypeName a = new ATypeName();
你現在拿到一個 ATypeName 物件
類別的核心結構:欄位與方法
在你開始寫 Java 類別時,會常常看到兩個重要的東西:欄位(Fields)跟 方法(Methods)
- 欄位:就像是物件的「資料夾」或「口袋」,它們用來存放資料,例如名字、年齡、重量
- 方法:這個物件「可以做的事」,像是「計算年齡」、「印出訊息」、「叫」
我們來看一個類比範例:如果你有一個 Person
類別,它可能會有:
- 欄位:
name
(名字)、age
(年齡) - 方法:
sayHello()
(打招呼)、growOlder()
(長一歲)
這些組合在一起,構成了這個 Person
類別的基本樣子
欄位 (Fields):物件的資料儲存櫃
欄位是用來儲存一個物件的「狀態」的地方。每個欄位都像是一個變數,但它隸屬於某個物件。舉例來說:如果你有一台車這個物件,它可能會有 顏色
、時速
、油量
這些屬性,這些就是欄位
在 Java 裡,欄位會定義在類別中,並且在建立物件之後,就可以透過「物件.欄位
」的方式來設定或讀取
範例:
class DataOnly {
int i; // 整數型態欄位 i
double d; // 小數型態欄位 d
boolean b; // 布林型態欄位 b
}
DataOnly data = new DataOnly(); // 創建一個 DataOnly 類別的實例
// 設定欄位的值
data.i = 42;
data.d = 3.14;
data.b = true;
// 讀取欄位的值
System.out.println(data.i); // 印出 42
每個物件都會有自己的欄位副本,這表示即使你創造了兩個 DataOnly
物件,它們的欄位值也不會互相影響
方法 (Methods):物件會「做什麼」
如果欄位是物件的「資料」,那方法就是物件「可以做的事」。方法是寫在類別裡的功能單元,它就像是這個物件會做的某種動作,或是可以完成的任務
方法的基本語法看起來像這樣:
int add(int x, int y) {
return x + y;
}
void greet() {
System.out.println("Hello!");
}
int add(int x, int y)
:這是一個會「加總兩個數字」的功能,它會回傳(return)一個整數void greet()
:這是一個不回傳任何東西的方法,它會印出一段文字
每個方法都有幾個固定的結構要素:
- 回傳型別(像
int
或void
) - 方法名稱(像
add
或greet
) - 參數列表(放在括號內,像
int x, int y
) - 方法本體(用大括號
{}
包住裡面的程式碼)
你可以透過「物件.方法()
」的方式來執行這些動作。例如:
Calculator calc = new Calculator();
int result = calc.add(3, 5); // 呼叫 add 方法
這就像你在對這個物件下指令:「嘿 calc 幫我把 3 和 5 加起來。」
欄位沒設定值會怎樣?Java 自動幫你填好了
如果欄位沒有列明設定,Java 會自動賦預設值:
Primitive | Default Value |
---|---|
boolean | false |
char | '\u0000' (null) |
byte | (byte) 0 |
short | (short) 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
這只限於欄位,如果是類別中的變數,Java 會自動提供預設值。但如果是方法裡面的區域變數,則必須手動賦值,否則在編譯階段就會產生錯誤
如何呼叫方法?
當你在程式中寫好一個方法後,如果想要使用它,就要透過「呼叫(Call)」這個方法來執行裡面的程式碼。呼叫方法的方式通常是這樣:
int x = myObject.doSomething(42);
這行程式代表:我們有一個名為 myObject
的物件,我們對它「發送訊息」,請它執行名為 doSomething
的方法,並傳入一個參數 42
。方法會執行它裡面的內容,並將結果回傳給變數 x
這裡可以拆解成:
myObject
是你之前用new
建立的某個物件.
是用來呼叫這個物件的方法或欄位的符號doSomething(42)
是方法名稱 + 括號內的參數
你可以把這種呼叫方式想成是:我對這個物件說「請你幫我做這件事」,物件會照方法的定義去做並回應你。
呼叫方法的語法很一致,也可以像這樣:
printer.printPage();
person.sayHello();
math.add(5, 7);
這些都是在叫一個物件「執行它會的動作」。方法也可以不回傳東西(例如 void
),或需要好幾個參數,一切都看方法本身怎麼定義
方法、參數與回傳值
你可能會想問:「欸,那段 int add(int x, int y)
到底是什麼意思?」,現在來慢慢拆解給你看
在 Java 裡,一段像這樣的東西:
int add(int x, int y) {
return x + y;
}
就叫做方法(Method)。
- 它是一種「可以被呼叫來執行某件事」的小程式。
- 它屬於某個類別(也就是某個物件的功能)。
讓我們一段一段看懂:
int // 這個方法會回傳一個整數
add // 方法的名稱,想像是這個功能的名字
(int x, int y) // 這個方法需要兩個整數做為輸入
{ return x + y; } // 方法的內容,這裡會把兩個數加起來後回傳
這樣的結構是通用的。每個方法都包含:
- 回傳型別(會回傳什麼資料?沒有就寫
void
) - 方法名稱(你想叫它什麼都行,但不要太亂)
- 參數列表(要輸入什麼資料給它)
- 方法內容(本體)(你希望它執行什麼事情)
呼叫方法的時候,參數是怎麼傳進去的?
int result = add(3, 5);
你這樣寫,就是叫 add
這個方法用 3
跟 5
當作參數去做事。對應到方法內部,它會把 x = 3
、y = 5
,然後算出 8 丟給你
- 基本型別(像
int
、boolean
)會「傳值」,也就是把資料複製一份丟進去。 - 物件型別(像
String
或自己寫的類別)會「傳參考」,就像是把某個東西的地址丟進去,雙方共用那一份東西
參數的型別一定要對,不然編譯器會不高興(報錯)
方法的回傳值是什麼?
如果你有一個方法會「產生答案」,就要用 return
把答案丟回去
int square(int x) {
return x * x;
}
這代表你丟進去一個數字,它會把平方後的結果「回傳」給你
如果你只是做點事情,不需要回傳(比如印一句話),那就可以寫成 void
:
void greet() {
System.out.println("Hello!");
}
你呼叫它,它就執行;但它不會回給你任何東西
一個方法 = 回傳型別 + 名稱 + 參數列表 + 方法體。呼叫時記得依照定義傳參數、接回傳值。
理解這些基本構造,是學習 Java 類別與物件操作的重要基礎
總結
- 類別 = 物件模版
- 欄位 = 物件資料
- 方法 = 物件功能
- 預設值只有欄位有
- 方法名 + 參數 = 簡章
Comments ()