修飾字的英文又稱 Modifier,Java 的方法的修飾字有以下幾種:
- abstract
- final
- native
- public, protected, private
- static
- strictfp
- synchronized
而方法 (method) 是一組連續的程式敘述所組成。方法會有名稱, 可能會有 0 個以上的引數 (argument),可能有回傳值等等。要定義一個方法的 signature 有以下項目:
- modifiers 表示修飾字,就是接下來要提到的部分。
- type 表示回傳值型別,若沒有回傳值,則為 void。
- name 表示方法的名稱。但要注意不同的方法,在名稱定義相同的情況下,不能有相同的參數個數,請參考 Overloading 方法多載。
- paramlist 參數列,可定義 0 個以上,參數跟參數之間需要用逗號 (,) 隔開。
- throws 列出方法會拋出的可檢測例外 (unchecke exceptions),若不會拋出例外,則不用寫 throws 的部分; 拋出的例外可以是多個,要用逗號 (,) 隔開。
Modifier 修飾字的定義來自於 java.lang.reflect 底下的 Modifier 類別,Modifier 繼承自 Object。方法的修飾字可以是 0 個以上的關鍵字 (就是以上所列的那些)。
Modifier 可以用在 類別, 方法, 屬性上面,此章大致上是針對方法所描述,因此沒有特別明說 Volatile, transient 這兩個修飾字。
abstract
- abstract 修飾的方法是沒有實作內容的方法,只需要留下組成方法的主體就可。
- 一個類別中若有包含 abstract 方法的話,則該類別本身也必須要是 abstract。
- 且宣告為 abstract 的類別是不能被實體化 (new)的。
final
- final 修飾字的特性就是一經修飾就不能修改。
- final 方法在子類別中不可以修改。
- 假如是類別宣告為 final,其所有的方法也都是 final。
native
- native 是用在把 Java 跟其他語言寫出來的函式庫作為連接,實作內容不是用 Java 寫的,native 的實作程式碼在 JVM 之外,跟 abstract 很像,主要是定義主體,大括號用一個 ; 代替,實作卻可能是其他語言來實作。
- 現在幾乎不太會使用到 native。
public, protected, private
- 存取修飾字,定義該方法是某可以在定義他的類別之外使用。
static
- 宣告為 static 的方法屬於類別方法 (class method),此方法會跟類別本身有關,而不是跟該類別的實體相關。
- static 方法只能存取 static 變數
- static 方法只能直接存取其他 static 方法
- static 方法沒有 this, 所以不能使用 this 變數
strictfp
- strictfp,代表 floating point,主要用來解決浮點數運算的問題。因為 Java 會採用執行平台上浮點數硬體方面延展精確度的優點,而 strictfp 可以強制 Java 只能用 32 或 64 位元的浮點數格式執行浮點運算 (<- 但這會使結果較不準確)。
synchronized
- 此修飾字會讓方法具備執行緒安全,用來防止兩個執行緒同時執行同一個方法。
- (但好的方法通常會說明該方法是否具有執行緒安全,不應該依賴 synchronized)
讀書筆記參考自: 《JAVA 技術手冊第六版》
strictfp 很少見,synchronized 很難理解,native 像我家廚房
回覆刪除lol