final關鍵字在Java中用于聲明變量、方法和類,表示它們的值或行為不能被修改。
-
被 final 修飾的類不可以被繼承
-
被 final 修飾的方法不可以被重寫
-
被 final 修飾的變量不可變,被 final 修飾的變量必須被顯式第指定初始值,還得注意的是,這里的不可變指的是變量的引用不可變,不是引用指向的內容的不可變。
修飾變量時:當一個變量被聲明為final時,它就變成了常量,其值一旦被初始化后就不能被改變。這對于創建不可變的類屬性或局部變量非常有用,可以確保變量的值在整個程序運行期間保持不變。這個的不可變指的是變量的引用不可變,不是引用的內容不可變
final StringBuilder sb = new StringBuilder("abc");
sb.append("d");
System.out.pirntln(sb); //abcd
修飾方法時:當一個方法被聲明為final時,它不能被子類覆蓋(重寫)。這意味著父類的final方法會阻止子類改變該方法的行為。通常,這是為了確保某些關鍵的方法在所有子類中保持一致性。
修飾類時:當一個類被聲明為final時,它不能被繼承。這是為了防止其他類通過繼承來修改這個類的行為。例如,Java中的String類就是一個final類,這保證了字符串的不可變性。
final、finally、finalize的區別
final、finally和finalize在Java中有著各自獨特的用途和含義。具體如下:
final:
修飾變量:當用于變量時,final關鍵字表明該變量是不可變的,即一旦賦值后,其值就不能被更改。
修飾方法:當用于方法時,final關鍵字表示該方法不能被子類覆蓋(重寫),確保了方法的行為在繼承結構中保持一致。
修飾類:當用于類時,final關鍵字意味著這個類不能被其他類繼承,例如String類就是一個final類,這有助于保證其不可變性。
finally:
異常處理:finally是異常處理結構的一部分,它屬于try-catch語句的補充。無論try塊中是否拋出異常,finally塊中的代碼都會被執行。這對于資源的清理工作非常重要,如關閉文件流或釋放網絡連接等。
finalize:
垃圾收集:finalize是Object類的一個方法,它在垃圾收集器準備回收對象所占用的內存之前被調用。這個方法允許進行一些清理工作,如釋放非內存資源。然而,由于依賴于垃圾收集器的不確定性,不推薦依賴finalize方法進行資源清理。
綜上所述,final關鍵字主要用于限制修改,finally用于確保代碼執行,而finalize與垃圾收集相關。它們在Java編程中扮演著不同的角色,對于理解Java語言的內存管理、繼承和異常處理機制至關重要。