一篇文章帶你弄懂Final關鍵字的相關知識

2021-01-07 51CTO

一、final關鍵字

1.如果一個類被final修飾符所修飾,表示該類不可能有子類,這樣的類就叫做最終類。final關鍵字可以修飾類、變量、方法。

2.final關鍵字修飾類、修飾方法、修飾變量的特點

final關鍵字修飾類:不能被別的類繼承;

final關鍵字修飾方法:方法也不能被覆蓋,也就是方法不能被繼承的子類重寫;

final關鍵字修飾變量:成員變量、局部變量是常量,僅一次賦值。

二、final關鍵字修飾類

1.當類被final關鍵字修飾,表示這個類是不能被繼承的。

2.final關鍵字修飾類例子

//定義Fruit類 final class Fruit{ //info()方法 public void info(){         System.out.print("fruit");   } } //定義Cherry繼承Fruit類 class Cherry extends Fruit{ //infor()方法 public void info(){         System.out.print("cherry");   } } public class p24 { public static void main(String[] args) {         // TODO Auto-generated method stub         Cherry c=new Cherry();//實例化子類Cherry對象         c.info();//調用info()方法   } } 

輸出的結果是:

從上面的編譯結果可以看出是錯誤的,因為final關鍵字修飾Fruit類,當Cherry類繼承Fruit類時,編譯出現了「Unresolved compilation problem: The type Cherry cannot subclass the final class Fruit」表示Cherry類型不能將final類水果子類化,所以final修飾的類是不能被別的類繼承的。

三、final關鍵字修飾方法

1.final關鍵字修飾方法,表示該類的子類的不可以重寫方法。

2.final關鍵字修飾方法案例

//定義Fruit類 class Fruit{ //使用final修飾info()方法 public final void info(){         System.out.print("fruit");   } } //定義Cherry繼承Fruit類 class Cherry extends Fruit{ //重寫Fruit類的info()方法 public void info(){         System.out.print("cherry");   } }  public class p24 { public static void main(String[] args) {         // TODO Auto-generated method stub         Cherry c=new Cherry();//實例化子類Cherry對象         c.info();//調用info()方法   } } 

3.運行的結果是:

從上面的代碼中編譯結果是錯誤的,因為Cherry類重寫Fruit類的info()方法,我們可以看到final關鍵字修飾Fruit類的info()方法,所以final關鍵字修飾的方法是最終的,子類是不能對這個方法進行重寫的。如果父類定義的某個方法,不想讓子類重寫,就可以使用這個final關鍵字修飾方法。

四、final關鍵字修飾變量

1.final關鍵字修飾變量時,變量就變成常量,也就是一旦被賦值,就不能重新賦值。

2.final關鍵字修飾成員變量,需要在定義顯示指定初始值。

3.final關鍵字修飾局部變量,可以在定義時指定初始值,也可以不指定初始值。

4.final關鍵字修飾局部變量的例子

final int i = 3;//第一次賦值 i= 6;//再次賦值 

上面代碼中會出現編譯錯誤,因為是重新給i賦值,用final關鍵字修飾int類型變量i,被final關鍵字修飾的變量為常量,只能被賦值一次,不可以被重新賦值,i是基本數據類型,i的內容是值。

5.final關鍵字修飾成員變量例子

//定義Fruit類 class Fruit{   final String name;//final關鍵字修飾name屬性   double weight=66;//水果的重量weight屬性   //info()方法列印水果信息   public final void info(){     System.out.print("我是一個"+name+"重量為:"+weight+"g!");   } }  public class p24 {   public static void main(String[] args) {     // TODO Auto-generated method stub     Fruit f=new Fruit();//實例化Fruit對象     f.info();//調用info()方法   } } 

運行的結果是:

從上面的運行結果我們可以看到編譯是錯誤的,因為final關鍵字修飾的成員變量,在定義的時要給它一個初始值。

五、總結

本文主要介紹了final關鍵字修飾類、final關鍵字修飾方法、final關鍵字修飾變量。

final關鍵字修飾類說明了是不能被別的類繼承的。final關鍵字修飾方法表示該類的子類的方法是不可以被重寫的。

final關鍵字修飾變量時,成員變量、局部變量是常量,僅一次賦值。final關鍵字修飾類、方法、變量也通過案例幫助理解。

本文轉載自微信公眾號「 Java進階學習交流」,可以通過以下二維碼關注。轉載本文請聯繫 Java進階學習交流公眾號。

【編輯推薦】

【責任編輯:

武曉燕

TEL:(010)68476606】

點讚 0

相關焦點

  • 一篇文章帶你了解Java中的抽象類和接口知識
    Java帶大家一起了解Java的部分基礎知識,感興趣的小夥伴們可以去學習下了,一篇文章帶你了解Java類的設計和封裝及類成員的訪問控制、一篇文章帶你了解this關鍵字和單例模式、Java基礎入門篇——面向對象和類的定義,這篇文章帶大家一起學習下Java知識中的抽象類和接口知識,一起來看看吧。
  • 【編程基礎】深入理解Java中的final關鍵字
  • Java關鍵字final、static使用總結
    你可能出於兩種理解而需要阻止改變:設計或效率。 final類不能被繼承,沒有子類,final類中的方法默認是final的。 final方法不能被子類的方法覆蓋,但可以被繼承。 final成員變量表示常量,只能被賦值一次,賦值後值不再改變。 final不能用於修飾構造方法。
  • 每日一課 | Java Final關鍵字示例
    Java中的Final關鍵字是一個修飾符,用於限制用戶執行不需要的代碼或防止代碼或值被更改。可以在3個上下文中使用此關鍵字。
  • final關鍵字要掌握的知識點
    Java裡final關鍵字,老生常談的幾個點很多人都應該知道,你不遵循下面的定義,編譯器都會報錯不給通過。fianl修飾的類是不能被繼承的final修飾的方法是不能被子類重寫的final修飾的變量是不可變的final修飾的引用類型變量
  • Java並發關鍵字-final
    final關鍵字舉例final經常會被用作不變類上,利用final的不可更改性。我們先來看看什麼是不變類。不變類不變類的意思是創建該類的實例後,該實例的實例變量是不可改變的。滿足以下條件則可以成為不可變類:使用private和final修飾符來修飾該類的成員變量;提供帶參的構造器用於初始化類的成員變量;僅為該類的成員變量提供getter方法,不提供setter方法,因為普通方法無法修改fina修飾的成員變量;如果有必要就重寫Object類 的hashCode()和equals()方法,應該保證用equals()判斷相同的兩個對象其
  • 終於明白了Java為什麼要加final關鍵字了!
    但是當你使用超過一種語言進行開發的時候就會發現,雖然都是高級語言,但是它們之間很多特性都是不太相同的。 # 現象描述 在 Java 8 之前,匿名內部類在使用外部成員的時候,會報錯並提示 「Cannot refer to a non-final variable arg inside an inner class defined in a different method」:
  • 終於明白 Java 為什麼要加 final 關鍵字了!
    但是當你使用超過一種語言進行開發的時候就會發現,雖然都是高級語言,但是它們之間很多特性都是不太相同的。當然不是,當你試圖修改這些變量的時候,仍然會提示錯誤:or effectively final」,很遺憾,仍然不能修改。
  • 可能是把 Java 接口講得最通俗的一篇文章
    如果你現在就想知道抽象類與接口之間的區別,我可以提前給你說一個:當然了,在沒有搞清楚接口到底是什麼,它可以做什麼之前,這個區別理解起來會有點難度。01、接口是什麼接口是通過 interface 關鍵字定義的,它可以包含一些常量和方法,來看下面這個示例。
  • 一篇文章弄懂Object.defineProperty,現學現用,來試試相關筆試題吧
    昨天,在我通讀vue文檔過程中,一篇名為深入響應式原理吸引了我的注意,文中簡述了vue數據響應式的原理,以及在操作數組與對象時需要注意的點,在實現上vue也使用了Object.defineProperty方法,聯想到vue計算屬性的getter與setter,我想是時候弄懂這個API了,那麼請各位跟隨我的腳步,好好認識這個在JavaScript中高頻出現的API,本文開始。
  • 鴻蒙HarmonyOS開發Java並發-final關鍵字
    一、final使用場景final可以稀釋變量,方法和類,用於便是修飾的內容一旦賦值之後不會再被改變,比如string類就是一個final類型的類。局部變量final局部變量有程式設計師進行顯示初始化,如果final局部變量已經進行了初始化則後面就不能再次進行更改,如果final變量未進行初始化,可以進行賦值,當且僅有一次賦值,一旦賦值之後再次賦值就會出錯。
  • 一文解析Java常用關鍵字
    Java語言中final是一個關鍵字(key words),其表示的三個含義:final修飾的變量是常量,final修飾的類不可繼承,final修飾的方法不可重寫。 final關鍵字三個特性:final修飾的變量為常量、final修飾的類不可繼承、final修飾的方法不可重寫。
  • 【推薦一篇文章】老照片帶你讀懂「集體經濟」
    【推薦一篇文章】老照片帶你讀懂「集體經濟」 2019-08-11 11:17 來源:澎湃新聞·澎湃號·媒體
  • 自媒體文章如何選取關鍵詞?一篇文章如何選關鍵詞?關鍵看這幾點
    文章標題也得帶關鍵詞!文章標題一定要帶關鍵詞!如果你的標題不帶關鍵詞,那用戶怎麼搜索到你的內容了?就算你不直接帶關鍵詞,至少也要有語義詞。其次自己的思路是要有的,結合時事熱點寫軟文,蹭話題熱度,標題要吸引人。打造一款爆文,主要搞定兩個主體,一個是平臺,一個是觀眾。
  • 【專業】一篇文章弄懂dota2中的躲避、閃避、致盲和miss
    【專業】一篇文章弄懂dota2中的躲避、閃避、致盲和miss 2018-05-30 14:07  DOTA2課堂
  • 看完這篇 final、finally 和 finalize 和面試官扯皮就沒問題了
    final 是 Java 中的關鍵字,它也是 Java 中很重要的一個關鍵字,final
  • 如何寫出一篇高質量的英文原創文章
    所寫的文章能不能對用戶產生價值?這個過程解決了用戶的什麼需求。中文對我來說不是什麼太大的問題,寫英文文章的話,也是我的軟肋(自己看的很滿足,老外會大跌眼鏡)。我當然知道內容為王了,可是我自己寫的又跛腳的很,那怎麼辦?你說叫iwriter.com人去寫啊。問題是,我怕他們也只是東拼西湊的,問題是他們壓根就不了解我的產品,所以感覺他們不靠譜。
  • 一篇文章帶你了解HTML語法
    1.標題    我們經常寫文章的時候,常會使用標題,可以發現標題的字體一般比段落的字體要大,因為它要突出整篇文章的核心,用最簡短的文字描繪出來。Html中設置標題的相關代碼就是<h1>~<h6>,注意一定要寫</h1>關閉它們,否則會引發位置的錯誤。
  • 3分鐘講清Java面試中的Java常用關鍵字
    2 finalfinal 的意思是不變的,一般來說用於以下三種場景:被 final 修飾的方法,表明該方法是無法覆寫的;被 final 修飾的變量,說明該變量在聲明的時候,就必須初始化完成,而且以後也不能修改其內存地址。第三點注意下,我們說的是無法修改其內存地址,並沒有說無法修改其值。
  • Java面向對象之final、abstract抽象、和變量生命周期
    class代碼顯示錯誤,無法從SuperClass繼承,編譯器提示刪除final關鍵字;刪除final關鍵字後,代碼正確無誤。>如果用final關鍵字修飾方法呢?final關鍵字修飾的常量。final關鍵字修飾的常量通過上述代碼,不難看出,final關鍵字修飾的欄位無法被修改