Java关键字final使用详解
2019獨角獸企業重金招聘Python工程師標準>>>
http://docs.oracle.com/javase/tutorial/java/IandI/final.html
Writing Final Classes and Methods
You can declare some or all of a class's methods final. You use the final keyword in a method declaration to indicate that the method cannot be overridden by subclasses. The Object class does this—a number of its methods are final.
You might wish to make a method final if it has an implementation that should not be changed and it is critical to the consistent state of the object. For example, you might want to make the getFirstPlayer method in this ChessAlgorithm class final:
class ChessAlgorithm {
??? enum ChessPlayer { WHITE, BLACK }
??? ...
??? final ChessPlayer getFirstPlayer() {
??????? return ChessPlayer.WHITE;
??? }
??? ...
}
Methods called from constructors should generally be declared final. If a constructor calls a non-final method, a subclass may redefine that method with surprising or undesirable results.
Note that you can also declare an entire class final. A class that is declared final cannot be subclassed. This is particularly useful, for example, when creating an immutable class like the String class.
從構造函數中調用的方法最好聲明為final。如果構造調用了非final的方法,子類如果重新定義了那個方法,會帶來意想不到的結果。
請注意你可以聲明整個類是final的。被聲明為final的類不會有子類。
參考博客:
http://blog.csdn.net/andie_guo/article/details/12885885
根據程序上下文環境,Java關鍵字final有“這是無法改變的”或者“終態的”含義,它可以修飾非抽象類、非抽象類成員方法和變量。你可能出于兩種理解而需要阻止改變:設計或效率。
final類不能被繼承,沒有子類,final類中的方法默認是final的。
final方法不能被子類的方法覆蓋,但可以被繼承。
final成員變量表示常量,只能被賦值一次,賦值后值不再改變。
final不能用于修飾構造方法。
注意:父類的private成員方法是不能被子類方法覆蓋的,因此private類型的方法默認是final類型的。
1、final數據:
一個永不改變的編譯時常量。
一個在運行時被初始化的值,而之后無法被改變;
一個既是static又是final的域:是一段不能改變的存儲空間;
final類型運用于數據:
基本數據類型(int、double、char...)運用final時,使數值恒定不變;
對象引用運用final時,final使得引用恒定不變,引用內部的數據若不是final型,可以進行修改。
數組類型運用final時,final使得數組引用恒定不變,數組內部的數據若不是final型,可以進行修改。
final與static
final指明數據為一個常量,恒定無法修改;
static指明數據只占用一份存儲區域;
2、final方法
如果一個類不允許其子類覆蓋某個方法,則可以把這個方法聲明為final方法。
把方法鎖定,防止任何繼承類修改它的意義和實現。
高效。編譯器在遇到調用final方法時候會轉入內嵌機制,大大提高執行效率。
繼承類
public?class?FinalOverriding?extends?FinalDemo{public?void?f(){System.out.println("FinalOverriding.f()");}//????public?void?g(){//無法覆蓋父類的final方法g() //????????System.out.println("FinalOverriding.g()"); //????} }3、final類
final類不能被繼承,因此final類的成員方法沒有機會被覆蓋,默認都是final的。在設計類時候,如果這個類不需要有子類,類的實現細節不允許改變,并且確信這個類不會載被擴展,那么就設計為final類。例如:java.lang.String
4、參考:
《Java編程思想(美)Bruce Eckel著 陳昊鵬 譯》
轉載于:https://my.oschina.net/forrest420/blog/188330
總結
以上是生活随笔為你收集整理的Java关键字final使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tableau开始试用期后的破解方法
- 下一篇: Java使用线程并发库模拟弹夹装弹以及发