一.final關鍵字概述
1. 爲何會有finaljava
因爲繼承中有一個方法重寫的現象,而有時候咱們不想讓子類去重寫父類的方法.這對這種狀況java就給咱們提供了一個關鍵字: final編程
2. final概述安全
final關鍵字是最終的意思,能夠修飾類,變量,成員方法。併發
3. final修飾特色ide
- 修飾類: 被修飾類不能被繼承
- 修飾方法: 被修飾的方法不能被重寫
- 修飾變量: 被修飾的變量不能被從新賦值,由於這個量實際上是一個常量
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。