天天看點

靜态初始化塊與非靜态初始化塊

所謂“塊”,就是用{}所包含的代碼段,它們在邏輯上常常是一個整體。初始化塊主要用于對象的初始化操作,在建立對象時調用,可以用于完成初始化屬性值、加載其他類等功能。初始化塊的執行順序在構造方法之前,如果構造方法多次重載,此時可以考慮将構造方法中共通的代碼提到初始化塊中定義。

非靜态初始化塊主要用于對象的初始化操作,在每次建立對象時都要調用一次,其執行順序在構造方法之前。由于非靜态成員不能在靜态方法中使用,同樣也不能在靜态初始化塊中,是以,靜态初始化塊主要用于初始化靜态變量和靜态方法。靜态初始化塊隻調用一次,是在類被第一次加載到記憶體時,并非要建立對象才執行。`import org.junit.Test;

public class EqualsTest {

@Test

public void test(){

Print test1 = new Print();

Print test2 = new Print();

}

}

class Print{

{

System.out.println(“非靜态代碼塊”);

}

static{

System.out.println(“靜态代碼塊”);

}

}`

結果:

靜态初始化塊與非靜态初始化塊有一定的差別,靜态的初始化塊比非靜态初始化塊執行要早,而且靜态初始化塊隻執行一次,非靜态的初始化塊可執行多次。靜态初始化塊的執行時機需要注意,它在類加載器第一次加載類時調用,不一定非要建立對象,例如使用類名.靜态方法名。