同時被final和static修飾的常量或者類

同時被final和static修飾的類的屬性變量只能在兩種情況下初始化:(必須初始化)

a.在它被定義的時候,例: 
 

  1. public class Test{
  2. public final static int a=5;
  3. private Test(){
  4. }
  5. }

b.在類的靜態塊裏初始化,例: 
 

  1. public class Test{
  2. public final static int a;
  3. static{
  4. a=0;
  5. }
  6. }

c、特別對於初始化時候調用拋出異常的構造函數,初始時候注意,特別是在實現單例模式時(只能這麼初始化)
如:
class A

private final static A a;
static
{
try
{
a=new A();
}catch(Exception e)
{
throws new RuntimeException(e);          //必須有,不然不能完成常量的正確初始化
}
}
private A() throws Exception{}
}
解釋:

當類的屬性被同時被修飾爲static和final的時候,他屬於類的資源(類常量),那麼就是類在被加載進內存的時候(也就是應用程 序啓動的時候)就要已經爲此屬性分配了內存,所以此時屬性已經存在,它又被final修飾,所以必須在屬性定義了以後就給其初始化值.而構造函數是在當類 被實例化的時候纔會執行,所以用構造函數,這時候這個屬性沒有被初始化.程序就會報錯.而static塊是類被加載的時候執行,且只執行這一次,所以在 static塊中可以被初始化.

例如下:

private static final String remote_host = "127.0.0.1";
    private static final int remote_port = 12345; 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章