1. 程式人生 > >Java——final、static、static final修飾的欄位賦值的區別

Java——final、static、static final修飾的欄位賦值的區別

static修飾的欄位在類載入過程中的準備階段被初始化為0或null等預設值,而後在初始化階段(觸發類構造器<clinit>)才會被賦予程式碼中設定的值,如果沒有設定值,那麼它的值就為預設值。

final修飾的欄位在執行時被初始化(可以直接賦值,也可以在例項構造器中賦值),一旦賦值便不可更改;

static final修飾的欄位在Javac時生成ConstantValue屬性,在類載入的準備階段根據ConstantValue的值為該欄位賦值,它沒有預設值,必須顯式地賦值,否則Javac時會報錯。可以理解為在編譯期即把結果放入了常量池中。