1. final
final類不能被繼承,沒有子類,final類中的方法默認是final的
final方法不能被子類的方法復蓋,但可以被繼承
final成員變量表示常量,只能被賦值一次,賦值后不能再被改變
final不能用於修飾構造方法
private不能被子類方法覆蓋,private類型的方法默認是final類型的
final修飾的變量有三種:靜態變量、實例變量和局部變量,分別表示三種類型的常量。
注意:final變量定義的時候,可以先聲明,而不給初值,這中變量也稱為final空白,無論什么情況,編譯器都確保空白final在使用之前必須被初始化。
2. static
static表示“全局”或者“靜態”的意思,用來修飾成員變量和成員方法,也可以形成靜態static代碼塊,但是Java語言中沒有全局變量的概念。
被static修飾的成員變量和成員方法獨立於該類的任何對象。也就是說,它不依賴類特定的實例,被類的所有實例共享。只要這個類被加載,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。因此,static對象可以在它的任何對象創建之前訪問,無需引用任何對象。
用public修飾的static成員變量和成員方法本質是全局變量和全局方法,當聲明它類的對象市,不生成static變量的副本,而是類的所有實例共享同一個static變量。
- 類成員變量
- 靜態變量(類變量): static修飾
- 實例變量 : 無static修飾
- 局部變量
3. static和final一起使用
static final用來修飾成員變量和成員方法,可以理解為“全局變量”
對於變量,表示一旦給值就不可修改,並且通過類名可以訪問。
對於方法,表示不可覆蓋,並且可以通過類名直接訪問。
注意:
對於被static和final修飾過的實例常量,實例本身不能再改變了,但對於一些容器類型(比如,ArrayList、HashMap)的實例變量,不可以改變容器變量本身,但可以修改容器中存放的對象。