《Java架構築基》從Java基礎講起——深入理解Finial

一.final關鍵字概述

1. 爲什麼會有final

由於繼承中有一個方法重寫的現象,而有時候我們不想讓子類去重寫父類的方法.這對這種情況java就給我們提供了一個關鍵字: final

2. final概述

final關鍵字是最終的意思,可以修飾類,變量,成員方法。

3. final修飾特點

  • 修飾類: 被修飾類不能被繼承
  • 修飾方法: 被修飾的方法不能被重寫
  • 修飾變量: 被修飾的變量不能被重新賦值,因爲這個量其實是一個常量

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

  • 基本類型,是值不能被改變
  • 引用類型,是地址值不能被改變

二. final,finally,finalize有什麼不同?

1. final可以修飾類,方法,變量

  • final修飾類代表類不可以繼承拓展
  • final修飾變量表示變量不可以修改
  • final修飾方法表示方法不可以被重寫

2. finally則是Java保證重點代碼一定要被執行的一種機制

可以使用 try-finally 或者 try-catch-finally 來進行類似關閉 JDBC連接、保證 unlock 鎖等動作。

3. finalize 是基礎類 java.lang.Object的一個方法

它的設計目的是保證對象在被垃圾收集前完成特定資源的回收。finalize 機制現在已經不推薦使用,並且在 JDK 9開始被標記爲 deprecated。

4. final 關鍵字深入理解

  • 可以將方法或者類聲明爲 final,這樣就可以明確告知別人,這些行爲是不許修改的。
  • 如果你關注過 Java 核心類庫的定義或源碼, 有沒有發現java.lang 包下面的很多類,相當一部分都被聲明成爲final class?在第三方類庫的一些基礎類中同樣如此,這可以有效避免 API 使用者更改基礎功能,某種程度上,這是保證平臺安全的必要手段。
  • 使用 final 修飾參數或者變量,也可以清楚地避免意外賦值導致的編程錯誤,甚至,有人明確推薦將所有方法參數、本地變量、成員變量聲明成 final。
  • final 變量產生了某種程度的不可變(immutable)的效果,所以,可以用於保護只讀數據,尤其是在併發編程中,因爲明確地不能再賦值 final 變量,有利於減少額外的同步開銷,也可以省去一些防禦性拷貝的必要。

5. 在以下4種特殊情況下,finally塊不會被執行:

  • 在finally語句塊中發生了異常。
  • 在前面的代碼中用了System.exit()退出程序。
  • 程序所在的線程死亡。
  • 關閉CPU。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章