天天看點

靜态代碼塊和非靜态代碼塊的比較

非靜态代碼塊如:

{  

    System.out.println("2");  

}  

靜态代碼塊和非靜态代碼塊的比較

以上代碼塊就是非靜态的代碼塊,請注意這裡的方法名、作用域、傳回值、參數一概沒有,非靜态代碼塊會在每次類被調用或者被執行個體化時就會被執行。

靜态代碼塊如:

static {  

        System.out.println("3");  

    }  

上面的代碼塊就是靜态的代碼塊,同樣沒有方法名、作用域、傳回值以及參數,靜态代碼塊類似于靜态變量,不論類被調用多少次,該區域代碼隻在第一次時執行一次

大家可以通過下面的代碼做進一步的測試

public class test1 {  

    public static void main(String[] args) {  

        // TODO Auto-generated method stub  

        new test1();  

    {  

        System.out.println("2");  

    static {  

    public test1(){  

        System.out.println("1");  

輸出結果為

3

2

1

從結果中發現靜态代碼塊以及非靜态代碼塊都會在構造函數前執行,首次通路時,靜态代碼塊會在非靜态代碼塊前執行

靜态代碼塊是在類加載時自動執行的,非靜态代碼塊是在建立對象時自動執行的代碼,不建立對象不執行該類的非靜态代碼塊