• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • Java教程
    Java標識符與關鍵字
    Java變量
    Java數據類型
    Java運算符
    Java控制語句
    Java方法
    Java面向對象
    Java對象的創建和使用
    Java封裝
    Java中static和this
    Java繼承
    Java方法覆蓋和多態
    Java super
    Java基礎練習題

    Java static靜態代碼塊

     

     

    靜態代碼塊的語法格式是這樣的:

     

    類{
    //靜態代碼塊
    static{
    java語句;
    }
    }

     

    靜態代碼塊在類加載時執行,并且只執行一次。開發中使用不多,但離了它有的時候還真是沒法寫代碼。靜態代碼塊實際上是java語言為程序員準備的一個特殊的時刻,這個時刻就是類加載時刻,如果你想在類加載的時候執行一段代碼,那么這段代碼就有的放矢了。例如我們要在類加載的時候解析某個文件,并且要求該文件只解析一次,那么此時就可以把解析該文件的代碼寫到靜態代碼塊當中了。我們來測試一下靜態代碼塊:

     

    public class StaticTest01 {
    	//靜態代碼塊
    	static{
    		System.out.println(2);
    	}
    	//靜態代碼塊
    	static{
    		System.out.println(1);
    	}
    	//main方法
    	public static void main(String[] args) {
    		System.out.println("main execute!");
    	}
    	//靜態代碼塊
    	static{
    		System.out.println(0);
    	}
    }

     

    運行結果如下圖所示:

     

    圖11-22:靜態代碼塊運行結果

     

    通過以上的測試可以得知一個類當中可以編寫多個靜態代碼塊(盡管大部分情況下只編寫一個),并且靜態代碼塊遵循自上而下的順序依次執行,所以有的時候放在類體當中的代碼是有執行順序的(大部分情況下類體當中的代碼沒有順序要求,方法體當中的代碼是有順序要求的,方法體當中的代碼必須遵守自上而下的順序依次逐行執行),另外靜態代碼塊當中的代碼在main方法執行之前執行,這是因為靜態代碼塊在類加載時執行,并且只執行一次。再來看一下以下代碼:

     

    public class StaticTest02 {
    	int i = 100;
    	static{
    		System.out.println(i);
    	}
    }

     

    編譯結果如下圖所示:

     

    圖11-23:靜態代碼塊中訪問實例變量編譯報錯

     

    為什么編譯報錯呢?那是因為i變量是實例變量,實例變量必須先創建對象才能訪問,靜態代碼塊在類加載時執行,這個時候對象還沒有創建呢,所以i變量在這里是不能這樣訪問的。可以考慮在i變量前添加static,這樣i變量就變成靜態變量了,靜態變量訪問時不需要創建對象,直接通過“類”即可訪問,例如以下代碼:

     

    public class StaticTest02 {
    	static int i = 100;
    	static{
    		System.out.println("靜態變量i = " + i);
    	}
    	public static void main(String[] args) {
    	}
    }

     

    運行結果如下圖所示:

     

    圖11-24:靜態代碼塊中訪問靜態變量

     

    代碼修改為這樣呢?

     

    public class StaticTest02 {
    	static{
    		System.out.println("靜態變量i = " + i);
    	}
    	static int i = 100;
    }

     

    編譯報錯了,請看下圖:

     

    圖11-25:編譯報錯信息

     

    通過測試,可以看到有的時候類體當中的代碼也是有順序要求的(類體當中定義兩個獨立的方法,這兩個方法是沒有先后順序要求的),靜態代碼塊在類加載時執行,靜態變量在類加載時初始化,它們在同一時間發生,所以必然會有順序要求,如果在靜態代碼塊中要訪問i變量,那么i變量必須放到靜態代碼塊之前。

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏