如果在指定變數值之後,就不想再改變變數值,可以在宣告變數時加上final
限定,如果後續撰寫程式時,自己或別人不經意想修改final
變數,就會出現編譯錯誤。
如果物件資料成員被宣告為final
,但沒有明確使用=
指定值,那表示延遲物件成員值的指定,在建構式執行流程中,一定要有對該資料成員指定值的動作,否則編譯錯誤。
class
前也可以加上final
關鍵字,如果class
前使用了final
關鍵字定義,那麼表示這個類別是最後一個了,不會再有子類別,也就是不能被繼承。有沒有實際的例子呢?有的!String
在定義時就限定為final
了,這可以在API文件上得證:
如果你打算繼承
final
類別,則會發生編譯錯誤:定義方法時,也可以限定該方法為
final
,這表示最後一次定義方法了,也就是子類別不可以重新定義final
方法。有沒有實際的例子呢?有的!java.lang.Object
上有幾個final
方法。例如:如果你嘗試在繼承父類別後,重新定義
final
方法,則會發生編譯錯誤:在Java SE API中會宣告為
final
的類別或方法,通常與JVM物件或作業系統資源管理有密切相關,因此不希望API使用者繼承或重新定義。