1. 程式人生 > >java中的初始化塊和靜態塊

java中的初始化塊和靜態塊

java語言中的初始化塊

1、什麼是初始化塊?
在一個類中,用來對例項變數作初始化的語句塊。

2、初始化塊在何時被執行?
它在每一次構造物件時被執行且比構造器先執行。

3、對例項變數做初始化有三種方式?
1) 通過構造器實現初始化。
2) 在定義例項變數時就給它一個值。
3) 在類中,通過初始化塊實現初始化。

4、初始化塊的其它作用?
類體中只能定義例項變數和方法,不能直接寫其它任何功能性的語句。
但因為可以有初始化塊,所以可以在初始化塊中寫入功能性語句,通常這樣的語句是用來在初始化的時候起一些作用。

java語言中的靜態初始化塊
1、什麼是靜態初始化塊?

在一個類中,用static 修飾的語句塊。或者說加了static的初始化塊。


2、它的作用是什麼?
它用來對static變數作初始化。

3、它在何時被執行?
它在第一次載入類時被執行且只執行一次;與物件的建立無關。
注意:

(1)第一次載入類指的是:當某個類的名稱第一次出現了則稱之為類的載入。一次程式的執行,一個類只加載一次,所謂第一次載入類強調的是這個類第一次出現。 靜態變數也是在類的第一次載入時即分配記憶體空間初始化。 
(2)正因為靜態初始化塊和靜態變數在類第一次載入時即被執行和初始化,所以它們比任何物件變數或初始化塊(構建物件時執行)都執行的早。

public class Test {

    public Test() {
        System.out.println("Constructor called:構造器被呼叫");
    }

    static {
        System.out.println("Static block called:靜態塊被呼叫");
    }

    {
        System.out.println("Instance initializer called:初始化塊被呼叫");
    }

    public static void main(String[] args) {
        new Test();
        System.out.println("=======================");
        new Test();
    }
}
結果:
Static block called:靜態塊被呼叫
Instance initializer called:初始化被呼叫
Constructor called:構造器被呼叫
=======================
Instance initializer called:初始化被呼叫
Constructor called:構造器被呼叫