final 在 Java 中有什么作用?


Java基礎

final 在 Java 中有什么作用?

1、final修飾類:表示該類不能被繼承

  • 使用final修飾類的目的簡單明確: 表明這個類不能被繼承。
  • 當程序中有永遠不會被繼承的類時, 可以使用final關鍵字修飾。
  • 被final修飾的類所有成員方法都將被隱式修飾為final方法。

2、修飾方法:表示方法不能被重寫

  • 使用final修飾方法有兩個作用, 首要作用是鎖定方法, 不讓任何繼承類對其進行修改.
  • 另外一個作用是在編譯器對方法進行內聯, 提升效率. 但是現在已經很少這么使用了, 近代的Java版本已經把這部分的優化處理得很好了. 但是為了滿足求知欲還是了解一下什么是方法內斂.
  • 方法內斂: 當調用一個方法時, 系統需要進行保存現場信息, 建立棧幀, 恢復線程等操作, 這些操作都是相對比較耗時的. 如果使用final修飾一個了一個方法a, 在其他調用方法a的類進行編譯時, 方法a的代碼會直接嵌入到調用a的代碼塊中.

3、修飾變量:表示變量只能一次復制以后值不能被修改(常量)

  • 當final修飾的是一個基本數據類型數據時, 這個數據的值在初始化后將不能被改變; 當final修飾的是一個引用類型數據時, 也就是修飾一個對象時, 引用在初始化后將永遠指向一個內存地址, 不可修改. 但是該內存地址中保存的對象信息, 是可以進行修改的

final修飾基本數據類型時的內存示意圖:

Snipaste_2020-10-15_23-12-28

final修飾引用數據類型的示意圖:

Snipaste_2020-10-15_23-14-01

  • 不難看出final修飾變量的本質: final修飾的變量會指向一塊固定的內存, 這塊內存中的值不能改變.
  • 引用類型變量所指向的對象之所以可以修改, 是因為引用變量不是直接指向對象的數據, 而是指向對象的引用的. 所以被final修飾的引用類型變量將永遠指向一個固定的對象, 不能被修改; 對象的數據值可以被修改.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM