2011-11-03 100 views

回答

0

您的語法不正確;它應該是:

public abstract class A() 
{ 
    public static final String SomeString; 

    static 
    { 
     SomeString = "aaa"; 
    } 
} 

static塊允許時當初始化比單純= something;更復雜的類加載到被初始化靜態變量。

Reference

6

這不是一個方法,它是一個靜態初始化塊,和你的語法錯誤

public abstract class A() 
{ 
    public static String SomeString = null; 

    static 
    { 
     SomeString = "aaa"; 
    } 
} 

在時間初始化在Java字段(靜態或實例)的最簡單的方法他們的聲明僅僅是提供一個兼容數據類型的編譯時間常量值。例如:

public class InitializationWithConstants{ 

public static int staticIntField = 100; 
private boolean instanceBoolField = true; 

} 

這種類型的初始化的有其侷限性,由於其簡單性和基於甚至在一些中等複雜的邏輯它不能支持初始化 - 如使用一些邏輯初始化複雜陣列的只有選定的元件以用於循環。

這裏需要分別用於初始化靜態和實例字段的靜態初始化塊和初始化塊。

這是一對包含在一對大括號內的正常代碼塊,前面是一個'static'關鍵字。這些塊可以在類定義中的任何地方,我們可以有一個字段或一個方法。 Java運行時確保所有靜態初始化塊按照它們出現在源代碼中的順序進行調用,並且在將類加載到內存中時發生這種情況。

public class InitializationWithStaticInitBlock{ 

public static int staticIntField; 
private boolean instanceBoolField = true; 

static{ 
//compute the value of an int variable 'x' 
staticIntField = x; 
} 
} 

由於靜態初始化塊實際上是代碼塊,這樣他們會允許我們初始化甚至需要做一些邏輯處理他們得到他們的初始值的靜態字段。

0

不考慮語法,你正在尋找一個靜態的初始化塊。他們提到here

本質上,靜態初始化塊是一段代碼,當一個類被加載時執行,並且可以用來初始化類中的靜態字段。

實施例:

public abstract class A 
{ 
    public static final String SomeString; 

    static 
    { 
     System.out.println("static{}");  
     SomeString = "aaa"; 
    }  

    public static void main(String[]args) 
    { 
     System.out.println("main");  
    } 
} 

輸出:

static{} 
main 
0

贊成票它不是一個方法。它是靜態塊,並且當所有者類被加載時我被評估過一次。
你可以用它來動態初始化靜態變量...

相關問題