深入理解javaSE之final關鍵字(終結器)(面試重點)

final關鍵字含義

final是java中保留的關鍵字,可以修飾類、方法、屬性以及變量,一旦引用聲明作final,那麼我們將不能改變這個引用了,那麼如果你嘗試去改變的話,編譯器會報錯。

final變量

什麼叫final變量?

final變量就是用final修飾的變量,包括局部變量和本地變量,這裏解釋一下本地變量,本地變量就是在方法中定義的變量以及在代碼塊中的變量。

final通常和static一起使用,作爲常量,例如:

public static final COUNTRY="China";

final修飾的變量是隻讀的,如果你嘗試去改會發現,編譯器會報錯的。

final方法

final方法就是在方法的前面加上final修飾,表示該方法不可以被子類所覆寫,當然,如果你在寫代碼時不想讓子類覆寫你的方法,你就可以使用final修飾。

其實final修飾的方法加載的時候比較快,因爲在編譯的時候已經靜態綁定過。
下面我們看一個例子:
在這裏插入圖片描述
在上面的代碼中我們會發現,當子類覆寫父類中final修飾的方法時,編譯器報錯了,這就更加證明了final修飾的方法不能被子類所覆寫

final類

final類就是在類的前面加上final修飾,那麼被final修飾的類就不能被子類繼承了,一遍情況下一個類被final修飾,就說明這個類是足夠完整的,這時候我們就會想到String類以及Integer包裝類,但其實java中有很多這樣的類的。

我們還是看一段錯誤的代碼來加深一下以上說法:
在這裏插入圖片描述
可以看到編譯器說不能繼承final修飾的類。所以說final修飾的類不能被子類所繼承
要注意的是final一旦修飾一個類之後,該類的所有方法默認都會加上final修飾。(不包含成員變量)

總結

  • final在使用過程中有很多需要注意的地方,我查了很多,先列出來:
  • final關鍵字可以用於成員變量、本地變量、方法以及類。
  • final成員變量必須在聲明的時候初始化或者在構造器中初始化,否則就會報編譯錯誤。
  • 你不能夠對final變量再次賦值。
  • 本地變量必須在聲明時賦值。
  • 在匿名類中所有變量都必須是final變量。
  • final方法不能被重寫。
  • final類不能被繼承。
  • final關鍵字不同於finally關鍵字,後者用於異常處理。
  • final關鍵字容易與finalize()方法搞混,後者是在Object類中定義的方法,是在垃圾回收之前被JVM調用的方法。
  • 接口中聲明的所有變量本身是final的。
  • final和abstract這兩個關鍵字是反相關的,final類就不可能是abstract的。
  • final方法在編譯階段綁定,稱爲靜態綁定(static binding)。
  • 沒有在聲明時初始化final變量的稱爲空白final變量(blank final variable),它們必須在構造器中初始化,或者調用this()初始化。不這麼做的話,編譯器會報錯“final變量(變量名)需要進行初始化”。
  • 將類、方法、變量聲明爲final能夠提高性能,這樣JVM就有機會進行估計,然後優化。
    按照Java代碼慣例,final變量就是常量,而且通常常量名要大寫:

典型挖坑練習

到這裏你已經掌握了final的相關知識點,我們做一些簡單的但是很容易跳坑的練習題:

題目是選出下面出錯的語句:

byte b1=1,b2=2,b3,b6,b8;
final byte b4=4,b5=6,b7=9;
public void test() {
b3=(b1+b2); /*語句1*/
b6=b4+b5; /*語句2*/
b8=(b1+b4); /*語句3*/
b7=(b2+b5); /*語句4*/
System.out.println(b3+b6);
}

建議在做之前自己先做一遍,印象會更深哦!
解:

先看語句1,b1和b2都是byte類型的,但是我們知道byte short int 做運算之後結果都是int類型的,而b3是byte類型的,那麼語句1就是向下轉型了,是需要牆磚纔可以的,所以語句1是錯的,我們看看結果:

在這裏插入圖片描述

語句2:b4和b5都是final修飾的byte類型,所以做運算之後依然是byte類型的,b6本身也是byte類型,也沒有被final修飾,所以語句2是正確的。

在這裏插入圖片描述
可以看到編譯器並沒有報錯。
語句3和語句1是一樣的,這裏不多說

語句4,如果你看了前面的相關知識,你就會一眼判斷出是錯誤的,因爲b7是被final修飾的,所以不能被更改。

在這裏插入圖片描述
所以在這裏面只有語句2是正確的!你做對了嗎()

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