Java關鍵字final

一、定義

    final在Java中是一個保留的關鍵字,可以聲明成員變量、方法、類以及本地變量。一旦你將引用聲明作final,你將不能改變這個引用了,編譯器會檢查代碼,如果你試圖將變量再次初始化的話,編譯器會報編譯錯誤。

二、用法

(一) 修飾類

    1.當用final修飾一個類時,表明這個類不能被繼承,而且其中的成員方法都會被隱式的指定爲final方法,如String、Integer以及其他包裝類。

      1)他們的對象是隻可讀的,多線程環境下不需要考慮同步可以安全共享,擁有更好的性能。

(二) 修飾方法

    1.使用final方法的原因有兩個:第一個原因是把方法鎖定,以防任何繼承類修改它的含義;第二個原因是效率,在早期的Java實現版本中,會將final方法轉爲內嵌調用。但是如果方法過於龐大,可能看不到內嵌調用帶來的任何性能提升。在最近的Java版本中,不需要使用final方法進行這些優化了。

      1)被final修飾的方法不可以被重寫,如果你認爲一個方法的功能已經足夠完整了,子類中不需要改變的話,你可以聲明此方法爲final。

      2)final方法比非final方法要快,因爲在編譯的時候已經靜態綁定了,不需要在運行時再動態綁定。

(三) 修飾變量

    1.凡是對成員變量或者本地變量(在方法中的或者代碼塊中的變量稱爲本地變量或者局部變量)聲明爲final的都叫作final變量。

      1)當final修飾一個基本數據類型時,表示該基本數據類型的值一旦在初始化後便不能發生變化;如果final修飾一個引用類型時,則在對其初始化之後便不能再讓其指向其他對象了,但該引用所指向的對象的內容是可以發生變化的。本質上是一回事,因爲引用的值是一個地址,final要求值,即地址的值不發生變化。

      2)final成員變量必須在聲明的時候初始化或者在構造器中初始化(通常當做常量使用),否則就會報編譯錯誤。

      3)當final變量是基本數據類型以及String類型時,如果在編譯期間能知道它的確切值,則編譯器會把它當做編譯期常量使用。

      4)接口中聲明的所有變量本身是final的。

      5)局部變量只需要保證在使用之前被初始化賦值即可。

(四) 修飾參數

    1. final修飾參數表示該參數不可變,當修飾基本類型那麼在方法裏面不能改變該參數的值,當修飾的是引用類型則不能將該引用指向其他實例對象,但是可以改變引用類型的值。

      1)java採用的是值傳遞,對於引用變量,傳遞的是引用的值,也就是說讓實參和形參同時指向了同一個對象,因此讓形參重新指向另一個對象對實參並沒有任何影響(前提是該實參沒有被final關鍵詞修飾)。

三、總結

(一)好處

    1.final關鍵字提高了性能。JVM和Java應用都會緩存final變量。

    2.final變量可以安全的在多線程環境下進行共享,而不需要額外的同步開銷。

    3.使用final關鍵字,JVM會對方法、變量及類進行優化。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章