1. 程式人生 > >static、final、static final的區別

static、final、static final的區別

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)的例項變數,不可以改變容器變數本身,但可以修改容器中存放的物件。