Android課程---final關鍵字


final

     在Java中聲明屬性、方法和類時,可使用關鍵字final來修飾。
     final變量即為常量,只能賦值一次;
     final方法不能被子類重寫;
     final類不能被繼承。
 
1. final變量
    聲明 final 字段有助於優化器作出更好的優化決定,因為如果編譯器知道字段的值不會更改,那么它能安全地在寄存器中高速緩存該值。final 字段還通過讓編譯器強制該字段為只讀來提供額外的安全級別。
    其初始化可以在兩個地方,一是其定義處,也就是說在final變量定義時直接給其賦值,二是在構造函數中。這兩個地方只能選其一,要么在定義時給值,要么在構造函數中給值,不能同時既在定義時給了值,又在構造函數中給另外的值。
    一旦被初始化便不可改變,這里不可改變的意思對基本類型來說是其值不可變,而對於對象變量來說其引用不可再變。
    當函數參數為final類型時,你可以讀取使用該參數,但是無法改變該參數的值。
    另外方法中的內部類在用到方法中的參變量時,此參變也必須聲明為final才可使用。
     在java中,普通變量系統是自動初始化的,數值變量自動初始化為0,其余類型變量自動初始化為空。但是final類型的變量必須顯示初始化,且初始化的方法必須是在申明時或者在構造方法中直接賦值,而不能通過調用函數賦值。
 
2. final方法
    如果一個類不允許其子類覆蓋某個方法,則可以把這個方法聲明為final方法。
    使用final方法的原因有二:
    第一、把方法鎖定,防止任何繼承類修改它的意義和實現。
    第二、高效。編譯器在遇到調用final方法時候會轉入內嵌inline機制,大大提高執行效率。
 
注意,類中所有的private方法都被隱含是final的。由於無法取用private方法,則也無法重載之。
 
3. final類
    final類不能被繼承,因此final類的成員方法沒有機會被覆蓋,默認都是final的。在設計類時候,如果這個類不需要有子類,類的實現細節不允許改變,並且確信這個類不會載被擴展,那么就設計為final類。
 
-----------------
特別要注意一個問題:
    對於被static和final修飾過的實例常量,實例本身不能再改變了,但對於一些容器類型(比如,ArrayList、HashMap)的實例變量,不可以改變容器變量本身,但可以修改容器中存放的對象,這一點在編程中用到很多。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM