Java 建立不可變對象-final關鍵字的使用總結

來源:互聯網
上載者:User

標籤:執行個體   就是   sdn   變數類型   一個   定義   執行   問題:   bsp   

嚴格地說final修飾的變數不可被改變,一旦獲得了初始值,該final變數的值就不能被重新賦值,因此final修飾成員變數和修飾局部變數時有一定的不同。

1. final成員變數

一般的成員變數是隨類初始化或對象初始化而初始化的。當類初始化時,系統會為該類的類field分配記憶體,並分配預設值。也就是說,當執行靜態初始化塊時可以對類Field賦初值;當執行普通初始化塊、構造器時可對執行個體Field賦初值。因此,成員變數的初始值可以在定義該變數時指定預設值,也可以在初始化塊、構造器中指定初始值。如果沒有在以上各種情況下對類成員變數賦初值,那麼系統將會給final 修飾的類成員變數,一個預設的值,比如:0、’\u0000’\、false或者null。(這時候其實final成員變數也就失去了存在的意義)。 
歸納起來,使用final成員變數需要注意以下幾個問題: 
靜態Field :必須在靜態初始化塊中或聲明該Field時指定初始值 
普通Field:必須在非靜態初始化塊、聲明該Field或構造器中指定初始值 
final修飾的類成員,程式員最好顯示地指定其初始值

2. final局部變數 
系統不會對局部變數進行初始化,局部變數必須由程式員顯示初始化。因此使用final修飾局部變數時,既可以在定義時指定預設值,也可以不指定預設值。但是只能初始化一次。

3. final修飾基本類型變數和參考型別變數的區別 
1). 當final修飾基本變數類型時,不能對基本類型變數重新賦值,因此基本類型變數不能被改變 
2). 當final修飾參考型別變數時,final只保證這個參考型別變數所引用的地址不會改變,即一直引用同一個對象,但是這個對象(對象的非final成員變數的值可以改變)完全可以發生改變

4. 可執行“宏替換”的final變數 
對於一個final變數來說,不管它是類field、執行個體field,還是局部變數,只要該變數滿足3個條件,這個final變數就不再是一個變數,而是相當於一個直接量。 
1). 使用final 修飾符修飾 
2). 在定義該field變數時指定了初始值 
3). 該初始值可以在編譯時間就被確定下來

5. final修飾的方法不可以被重寫,final修飾的類不可以有子類

學習資源

http://blog.csdn.net/u010761376/article/details/50564415

Java 建立不可變對象-final關鍵字的使用總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.