public class Test{
public final int a;
static{
a=0;
}
}
5.分析第三第四原因:
第三條:當這個屬性被修飾為final,而非static的時候,它屬于類的實例對象的資源,當類被加載進內存的時候這個屬性并沒有給其分配內存空間,而只是定義了一個變量a,只有當類被實例化的時候這個屬性才被分配內存空間,而實例化的時候同時執行了構造函數,所以屬性被初始化了,也就符合了當它被分配內存空間的時候就需要初始化,以后不再改變的條件.
第四條:當類的屬性被同時被修飾為static和final的時候,他屬于類的資源,那么就是類在被加載進內存的時候(也就是應用程序啟動的時候)就要已經為此屬性分配了內存,所以此時屬性已經存在,它又被final修飾,所以必須在屬性定義了以后就給其初始化值.而構造函數是在當類被實例化的時候才會執行,所以用構造函數,這時候這個屬性沒有被初始化.程序就會報錯.而static塊是類被加載的時候執行,且只執行這一次,所以在static塊中可以被初始化.
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/