所謂“塊”,就是用{}所包含的代碼段,它們在邏輯上常常是一個整體。初始化塊主要用于對象的初始化操作,在建立對象時調用,可以用于完成初始化屬性值、加載其他類等功能。初始化塊的執行順序在構造方法之前,如果構造方法多次重載,此時可以考慮将構造方法中共通的代碼提到初始化塊中定義。
非靜态初始化塊主要用于對象的初始化操作,在每次建立對象時都要調用一次,其執行順序在構造方法之前。由于非靜态成員不能在靜态方法中使用,同樣也不能在靜态初始化塊中,是以,靜态初始化塊主要用于初始化靜态變量和靜态方法。靜态初始化塊隻調用一次,是在類被第一次加載到記憶體時,并非要建立對象才執行。`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(“靜态代碼塊”);
}
}`
結果:
靜态初始化塊與非靜态初始化塊有一定的差別,靜态的初始化塊比非靜态初始化塊執行要早,而且靜态初始化塊隻執行一次,非靜态的初始化塊可執行多次。靜态初始化塊的執行時機需要注意,它在類加載器第一次加載類時調用,不一定非要建立對象,例如使用類名.靜态方法名。