跳至主要内容

2.2 Class

Java Class Fundamentals

  • class的含意: 我準備告訴你一種新類型的 object 看起來像什麼樣子 (所以中國都會直翻為 )

  • 基本定義方法:

    class ATypeName { /* Class body goes here */ }
  • 基本使用方法:

    ATypeName a = new ATypeName();

Fields and methods

  • 一旦定義了 class,就能對它設置兩種元素
    • field: 台灣一般稱欄位、中國稱為字段
    • methods: 方法 (成員函數)
  • field 可以是任何類型的 object 或基本類型
    • 如果 field 是某個 object 的reference 就需要初始化
    • 每個 object 都有自己的儲存 field 的空間,不能在 object 間共享
class DataOnly {
int i;
double d;
boolean b;
}

DataOnly data = new DataOnly();
  • 可以對 field 賦值,而需要先知道如何取用成員 object 的 reference
    • 在 object reference 的名稱之後接一個句點
objectReference.memeber

// 賦值
data.i = 47;
data.d = 1.1;
data.b = false;
  • object 包含其他 object 時,只要連續使用句點即可
myPlane.leftTank.capacity = 100;

基本成員 default 值

  • 若基本成員沒有被初始化,Java 會確保它獲得 default 值來初始化
primitivedefault
booleanfalse
char‘\u0000’ (null)
byte(byte) 0
short(short) 0
int0
long0L
float0.0f
double0.0d
  • 非 class 內的 local variable 並不適用 class 的初始化,編譯時會出現錯誤

Methods, Arguments, and Return Values

  • 許多語言例如 C/C++ 使用 函數 來命名子程序,而 Java 常用 方法 來表示
  • method 基本組成包含
    • name
    • 參數 (argument): 要傳給方法的訊息的類型和名稱
    • 回傳型別 (return type): 調用方法後回傳的值的型別
    • body
ReturnType methodName(arg1, arg2, arg3); 
  • 方法名和參數列表合起來稱為方法的 signature,是方法的唯一標識
  • Java 中的 method 只能做為 class 的一部分建立,通過 object 才能調用
  • 調用 class 上不具備的方法會得到錯誤消息
  • 調用方法為列出對象名,接著句點,後面接上方法名和參數列表
objectName.methodName(arg1, arg2, arg3);
  • 假設有方法 f() ,不帶任何參數,回傳類型是 int,有個名為 a 的 object
int x = a.f();
// 返回值的類型要與 x 的類型兼容
  • 這種調用方法通常被稱為 發送消息給對象,上述的例子中消息是 f(),對象是 a

參數列表

  • 參數列表指定要傳遞給 method 怎樣的訊息,跟其他 Java 的訊息一樣,都採用 object 形式
  • 參數列表中必須指定每個要傳遞的 object 的類型跟名字
  • 這邊的資料傳遞實際上也都是 reference (primitives 為例外)
  • 傳遞的訊息引用的類型必須正確,參數設為 String,就必須傳遞 String,否則編譯器會報錯

Example

int storage(String s) {
return s.length() * 2;
}
  • 參數類型為 String ,參數名為 s
  • s 傳遞給這個 method 之後就可以當成 object 一樣進行處理,在這邊 s 的 **length()**方法被調用
  • return
    • 代表 “已經做完,離開此方法“
    • 如果此方法產生了一個值,這個值要放在 return 後面,在這個例子透過回傳值透過計算 s.length() * 2 得到
  • 不想回傳任何值可以回傳 void (空)
Boolean flag() { return true; }
double naturalLogBase() { return 2.718; }
void nothing() { return; }
void nothing() {}
  • 如果回傳型別為 voidreturn 關鍵字只是用來退出 method
  • 如果回傳型別不為 void,則編譯器會強制回傳正確類型的值