1. 程式人生 > >關於java 的static程式碼塊注意以及測試

關於java 的static程式碼塊注意以及測試

public class Test {

    //非靜態塊:每次初始化一個物件,都會導致一次非靜態塊的執行;在建構函式執行之前執行
    //繼承關係:父類的非靜態塊->父類的建構函式->自己的自由塊->自己的建構函式
  
 {
       System.out.println("before");
 }
    static int x = 10;
    
    static{
        x+=5;
        System.out.println("static1");
    }
    public static void main(String[] args) {
        new Test();   
        new Test();
        System.out.println(x);

    }

    //靜態塊
    static {
        x/=3;
        System.out.println("static2");
    }
    public Test(){
        System.out.println("建構函式");
    }
   

}

注意:

 1.靜態程式碼塊會在類被載入時自動執行。且優先於非靜態程式碼塊和例項方法之前執行,有且只執行一次

 2.靜態程式碼塊只能定義在類裡面,不能定義在方法裡面。

 3.靜態程式碼塊裡的變數都是區域性變數,只在塊內有效。

 4.一個類中可以定義多個靜態程式碼塊,按順序執行,且先執行完所有的靜態塊,在進行呼叫

 5.靜態程式碼塊只能訪問類的靜態成員,而不允許訪問例項成員。

 6.java中的自由塊分為兩種:靜態塊和非靜態塊

 7.當建立Test類的一個物件的時候,比如new Test()首先是類載入,然後才能new物件,靜態塊在類載入的時候就執行了,這就說明靜態塊在new物件之前就會執行,而且一個       類在第一次被使用的時候會被載入,然後在整個應用程式的生命週期當中不會再次被載入了,就載入這一次,所以這就說明,靜態塊就執行一次,不會執行第二遍!

輸出結果:

static1
static2
before
建構函式
before
建構函式
5