- 包含 final、abstract、transient、synchronized、native、strictfp、static。
Final 函式
- final 關鍵字可以防止函式被子類別覆寫,而且通常被用來當成 API 的一部份。
- 防止子類別覆寫函式也扼殺了許多 OO 的優勢,包含透過多型達到可擴充性。
Final 引數(Final Arguments)
- 在函式宣告的括號中出現的變數宣告,就是函式引數(method arguments),函數引數基本上和區域變數一樣,所以可使用 final,例:
public Record getRecord(int fileName, final int recordNumber) { ... }
代表 recordNumber 變數在此函式內,不能被修改。
抽象函式(Abstract Methods)
- 一個 abstract 函式是指該函式已經被宣告了,但還沒被實作,也就是它沒有函式的主體(method body)。
- 在一個沒有宣告成 abstract 的類別放進一個抽象函式,是不合法的!可是一個抽象類別可不包含任何抽象函式。
- 第一個抽象類別的具象子類別(concrete subclass)必須實作所有父類別的抽象函式。
總覺得這段原文敘述有點怪,還是改為以下:
當一具象類別(concrete subclass)繼承了抽象類別時,此具象類別必須實作所有父類別的抽象函式。 - abstract 不可和 final、private 和 static 一起使用。
- public abstract class A {
abstract void foo();
}
class B extends A {
void foo(int I) { }
}
這段程式碼是無法完成編譯的,因為 B 並未實作 A 的 foo() 抽象函式,而 foo(int I) 只是一個多載化函式(overloaded method,一個使用相同的識別字,但不相同的引數的函式)。
- synchronized 這個關鍵字是指讓函式一次只能被一個執行緒(thread)存取。
Native 函式
- native 修飾子是指該函式被和平台相關(platform-dependent)的程式碼實作,通常是 C。
- 只能用於函式,不可用於類別或變數。
- 必須注意 native 函式的宣告必須以分號來結尾(就像抽象函式),也就是實作是省略的。
- strictfp 強迫浮點數(和其他浮點數運算)遵循 IEEE 754 的標準。
- 優點是可確保每個平台所得到的結果是一致的,且可預測。
缺點是如困底層的平台支援更精準的浮點數運算,則 strictfp 函式將沒辦法使用到此優點。 - strictfp 可使用於類別及函式,但不可用於變數。