淺談java final關鍵字

来源:http://www.cnblogs.com/moVistar/archive/2017/12/18/8059512.html
-Advertisement-
Play Games

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


final關鍵字的含義?

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

什麼是final變數?

凡是對成員變數或者本地變數(在方法中的或者代碼塊中的變數稱為本地變數)聲明為final的都叫作final變數。final變數經常和static關鍵字一起使用,作為常量。

什麼是final方法?

final也可以聲明方法。方法前面加上final關鍵字,代表這個方法不可以被子類的方法重寫。如果你認為一個方法的功能已經足夠完整了,子類中不需要改變的話,你可以聲明此方法為final。final方法比非final方法要快,因為在編譯的時候已經靜態綁定了,不需要在運行時再動態綁定。

什麼是final類?

使用final來修飾的類叫作final類。final類通常功能是完整的,它們不能被繼承。Java中有許多類是final的,譬如String, Interger以及其他包裝類。

 

final關鍵字的好處

下麵總結了一些使用final關鍵字的好處

  1. final關鍵字提高了性能。JVM和Java應用都會緩存final變數。
  2. final變數可以安全的在多線程環境下進行共用,而不需要額外的同步開銷。
  3. 使用final關鍵字,JVM會對方法、變數及類進行優化。

String的final

將方法或類聲明為final主要目的是:確保它們不會再子類中改變語義。String類是final類,這意味著不允許任何人定義String的子類。換言之,如果有一個String的引用,它引用的一定是一個String對象,而不可能是其他類的對象。

 

final的理解:

final關鍵字可以用於成員變數、本地變數、方法以及類。

你不能夠對final變數再次賦值。

本地變數必須在聲明時賦值。

在匿名類中所有變數都必須是final變數。

final方法不能被重寫。

final類不能被繼承。

final關鍵字不同於finally關鍵字,後者用於異常處理。

final關鍵字容易與finalize()方法搞混,後者是在Object類中定義的方法,是在垃圾回收之前被JVM調用的方法。

介面中聲明的所有變數本身是final的。

final和abstract這兩個關鍵字是反相關的,final類就不可能是abstract的。

final方法在編譯階段綁定,稱為靜態綁定(static binding)。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對Python的基本知識進行了重溫和總結。(省略和C++相近的以及深刻瞭解的內容) 1.一般用反斜杠 / 將Python的一行語句分為多行顯示 2.raw_input 輸入內容 遇見回車終止並跳出 3.數據類型之List -- 列表 個人理解類似C++中的數組 4.數據類型之 Tuple -- 元組 ...
  • 通過把要載入的文件看作一個“功能”而不是一個文件,require對於用Ruby編寫的擴展和用C語言編寫的擴展都用一樣的方式。另外,.rb擴展名的文件與其它擴展名為.so、.dll或.bundle的文件使用方式也是一樣的。需要註意的是,require不能辨識出當前的工作目錄(.)。用戶可以顯式地指定它 ...
  • String類總結 String類概述: java.lang.String 類是字元串操作類 String類的常用構造方法: String類的常用判斷方法: 1.比較兩個字元串的內容是否相等 2.比較兩個字元串是否相等,忽略大小寫 3.判斷字元串是否以字元串str開頭 4.判斷字元串是否以字元串st ...
  • 記得有人說過一句話,大體意思是:現在電腦技術發展那麼迅速,日新月異,那些學電腦技術的人,要不斷學習才能不被淘汰,那些人的腦子是不是壞掉了,幹嘛要讓自己活的這麼累?表示不解。不想時隔幾年,我也進入了這個飛速發展的IT行業。大概是隨著時間的推移,個人價值觀也隨之改變了吧! 初入這個行業的程式員是迷茫 ...
  • BigDecimal 問題重現 今天在幹活的途中,發現一個很坑爹的問題,讓我來複現下問題: 從上游介面獲得的餘額,對於為0的,做了判斷 然後發現線上有對比問題; 試驗了下 然後很神奇的發現,bigDecimal很不乖。。。 原因 BigDecimal最早出現也是因為計算精度的問題,用float或者d ...
  • 集合 集合介紹: 由於數組中存放對象,對對象操作起來不方便。java中有一類容器,專門用來存儲對象。 集合與數組的區別: 1.數組的長度固定的,而集合長度時可變的 2.數組只能儲存同一類型的元素,而且能存基本數據類型和引用數據類型。集合可以存儲不同類型的元素,只能存儲引用數據類型 Collectio ...
  • Part I. Overview of Spring Framework The Spring Framework is a lightweight solution and a potential one-stop-shop for building yourenterprise-ready ap ...
  • 摘自《其實你應該這樣學Java》 10.1 面向對象 面向對象的開發方法,是將客觀世界看作由一個個對象組成,每個對象都有自身的特點規律(屬性、行為)、同時可以通過外部介面同外部聯繫。所有相同類型的對象抽象出一個高層的概念——類,由類生成具體的一個個對象。 例子:“人”,就是一個抽象的概念。“人”不是 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...