final修飾的變量有三種:靜態變量、實例變量和局部變量,分別表示三種類型的常量。
static表示“全局”或者“靜態”的意思,用來修飾成員變量和成員方法,也可以形成靜態static代碼塊,但是Java語言中沒有全局變量的概念
一、final 和 staic 區別
成員變量 (能否修改值)
final
final成員變量表示常量,只能被賦值一次,賦值后不能再被改變
staic
被static修飾的成員變量獨立於該類的任何對象, static 修飾的變量可以被賦值多次
類 (類是否可以不用初始化就訪問)
final
final類不能被繼承,沒有子類,final類中的方法默認是 final 的
static
static 類也不能被繼承,可以不用初始化而訪問
方法
final
final 方法不能被子類的方法重寫,但可以被繼承
final 不能用於修飾構造方法
* :private 不能被子類方法覆蓋,private類型的方法默認是final類型的
static
static 方法可以被繼承,但是不能重寫
被static修飾的成員方法獨立於該類的任何對象, 不依賴類特定的實例,被類的所有實例共享。
只要這個類被加載,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。因此,static對象可以在它的任何對象創建之前訪問,無需引用任何對象。
static方法是不在對象上執行的方法,不需要類的實例化,可以直接通過類調用。
二、final 和 static 一起用
修飾成員變量
static final用在變量上相當於一個”全局變量“,一旦初始化后就不能被修改,並且可以通過類名調用,整個類共享一個
修飾類
表明方法不能被子類修改(可以被繼承被調用),並且可以通過類名調用
*: static final 與 final static相同
[1] https://www.cnblogs.com/ggzhangxiaochao/p/10640905.html
[2] https://blog.csdn.net/azwhjp/article/details/107506156
靜態屬性、靜態方法和非靜態的屬性都可以被繼承和隱藏而不能被重寫