Java基礎
final 在 Java 中有什么作用?
1、final修飾類:表示該類不能被繼承
- 使用final修飾類的目的簡單明確: 表明這個類不能被繼承。
- 當程序中有永遠不會被繼承的類時, 可以使用final關鍵字修飾。
- 被final修飾的類所有成員方法都將被隱式修飾為final方法。
2、修飾方法:表示方法不能被重寫
- 使用final修飾方法有兩個作用, 首要作用是鎖定方法, 不讓任何繼承類對其進行修改.
- 另外一個作用是在編譯器對方法進行內聯, 提升效率. 但是現在已經很少這么使用了, 近代的Java版本已經把這部分的優化處理得很好了. 但是為了滿足求知欲還是了解一下什么是方法內斂.
- 方法內斂: 當調用一個方法時, 系統需要進行保存現場信息, 建立棧幀, 恢復線程等操作, 這些操作都是相對比較耗時的. 如果使用final修飾一個了一個方法a, 在其他調用方法a的類進行編譯時, 方法a的代碼會直接嵌入到調用a的代碼塊中.
3、修飾變量:表示變量只能一次復制以后值不能被修改(常量)
- 當final修飾的是一個基本數據類型數據時, 這個數據的值在初始化后將不能被改變; 當final修飾的是一個引用類型數據時, 也就是修飾一個對象時, 引用在初始化后將永遠指向一個內存地址, 不可修改. 但是該內存地址中保存的對象信息, 是可以進行修改的
final修飾基本數據類型時的內存示意圖:
final修飾引用數據類型的示意圖:
- 不難看出final修飾變量的本質: final修飾的變量會指向一塊固定的內存, 這塊內存中的值不能改變.
- 引用類型變量所指向的對象之所以可以修改, 是因為引用變量不是直接指向對象的數據, 而是指向對象的引用的. 所以被final修飾的引用類型變量將永遠指向一個固定的對象, 不能被修改; 對象的數據值可以被修改.