Java中static、final、static final的區別

weixin_34249678發表於2018-01-23

1. final:

final可以修飾:屬性,方法,類,區域性變數(方法中的變數)
final修飾的屬性的初始化可以在編譯期,也可以在執行期,初始化後不能被改變。
final修飾的屬性跟具體物件有關,在執行期初始化的final屬性,不同物件可以有不同的值。

final類不能被繼承,沒有子類,final類中的方法預設是final的
final方法不能被子類的方法覆蓋,但可以被繼承
final成員變數表示常量,只能被賦值一次,賦值後不能再被改變
final不能用於修飾構造方法
private不能被子類方法覆蓋,private型別的方法預設是final型別的

對於基本型別資料,final會將值變為一個常數(建立後不能被修改);但是對於物件控制程式碼(亦可稱作引用或者指標),final會將控制程式碼變為一個常數(進行宣告時,必須將控制程式碼初始化到一個具體的物件。而且不能再將控制程式碼指向另一個物件。但是,物件的本身是可以修改的。這一限制也適用於陣列,陣列也屬於物件,陣列本身也是可以修改的。方法引數中的final控制程式碼,意味著在該方法內部,我們不能改變引數控制程式碼指向的實際東西,也就是說在方法內部不能給形參控制程式碼再另外賦值)。

2. static:

static可以修飾:屬性,方法,程式碼段,內部類(靜態內部類或巢狀內部類)
static修飾的屬性的初始化在編譯期(類載入的時候),初始化後能改變。
static和“this、super”勢不兩立,static跟具體物件無關,而this、super正好跟具體物件有關。
static不可以修飾區域性變數。

被static修飾的成員變數和成員方法獨立於該類的任何物件。也就是說,它不依賴類特定的例項,被類的所有例項共享。只要這個類被載入,Java虛擬機器就能根據類名在執行時資料區的方法區內定找到他們。因此,static物件可以在它的任何物件建立之前訪問,無需引用任何物件。

3. static final:

static修飾的屬性強調它們只有一個,final修飾的屬性表明是一個常數(建立後不能被修改)。static final修飾的屬性表示一旦給值,就不可修改,並且可以通過類名訪問。

static final也可以修飾方法,表示該方法不能重寫,可以在不new物件的情況下呼叫

相關文章