為什麼要使用final 修飾符?
繼承關係最大弊端是破壞封裝:子類能訪問父類的實現細節,而且可以通過方法覆蓋的形式修改實現細節.
final最終的含義是 「最終的,不可改變的」 ,它可以修飾非抽象類、非抽象的方法和變數。
注意:構造方法不能用final修飾,因為構造方法不能被繼承,肯定就是最終的。
表示最終類,不能再有子類
什麼類可以定義成抽象類?
1)某個類不是專門為繼承而設計的
2)出於安全考慮,類的實現細節不能改變,不准修改源**
3)確信該類不會再被擴充套件
錯誤展示:
final class superclass
class subclass extends superclass
最終的方法,方法不能被子類覆蓋
什麼時候方法需要final類?
1)在父類中提供的統一方法骨架,不准子類通過方法覆蓋來修改,此時用final修飾。模板方法設計模式
2)在構造器中呼叫的方法(初始化方法),一般使用final修飾
注意:final修飾的方法,子類可以呼叫,但是不能覆蓋
錯誤展示:
class superclass
}class subclass extends superclass
}
最終的變數,表示常量,該變數只能賦值一次,不能再賦值
final是唯一可以修飾區域性變數的修飾符
注意:1)final變數必須顯示的指定初始值,系統不會為final欄位初始化。
2)final變數一旦被賦予初始值,就不能再被重新賦值。
3)常量名規範:常量名符合識別符號,單詞全部使用大寫字母,如果是多個單詞組成
,單詞間使用
下劃線隔開。
例如:int型別的最大值: final int
max_value= ....;
補充概念
:全域性靜態常量:
public static final
修飾的變數
,直接使用類名呼叫即可.
舉個面試題的例子:
final修飾的引用型別變數到底表示引用的位址不能改變,還是引用空間中的資料不能改變?
final修飾基本型別變數:
表示該變數的值不能改變,即不能用「=」號重新賦值。
final修飾引用型別變數:表示該變數的
引用的位址不能變
,而不是引用位址裡的內容不能變。
錯誤例子:
class demo
}
什麼時候用常量?
當在程式中
,多個地方使用到共同的資料
,且該資料不會改變
,此時我們專門定義全域性的常量,
一般的,
我們在開發中會專門定義乙個常量類
,專門用來儲存常量資料.
常量類:
class consts
常量分類:
1):字面值常量
(直接給出的資料值/直接量)
:比如:整數常量1,2,3,小數常量3.14,布林常量false,true等。
2):定義的final變數: .
JavaSE之final關鍵字
目錄 一 概念 二 修飾範圍 將方法或類宣告為final,主要目的是 確保他們不會在子類中改變語義。有些類在描述完之後,不想被繼承,或者有些類中的部分方法功能是固定的,不想讓子類重寫。就可以使用final關鍵字解決,它可以用來修飾類,類的成員,以及區域性變數。例如string類被final修飾,這意...
JavaSE筆記之 final關鍵字》
可能使用到final的三種情況 資料 方法 類 一 資料 final使基本資料型別的資料為常量,不可改變 使引用恆定不變,當在引數中使用final時,引用在方法體內不可改變。我們不能因為某資料時final的就認為在編譯時可以知道它的值,在執行時使用隨機生成也可初始化。final static int...
final關鍵字 final是最終的
final關鍵字 final是最終的 1.final修飾特點 a.修飾類,類不能被繼承 b.修飾變數,變數就變成了常量,修飾基本資料類 final int num 10 修飾引用資料型別變數只能始終指向乙個物件,不能再指向其他物件 即基本型別,是值不能被改變 報錯無法為最終變數num分配值 引用型別...