Java——代碼塊(普通塊、構造塊、靜態塊)

目錄

1、普通代碼塊

2、構造代碼塊

3、靜態代碼塊

4、總結


代碼塊在實際開發中很少見,只需要瞭解即可,實際開發中也不需要使用它。

代碼編寫中,使用{}聲明的程序塊就屬於代碼塊,而根據其出現的位置,及聲明關鍵字的不同,分爲四種:普通代碼塊、構造塊、靜態塊、同步代碼塊(多線程中涉及)

1、普通代碼塊

在方法中使用{}定義起來的一段代碼,利用普通代碼塊可以實現局部代碼的拆分(實際基本用不上)。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        {
            int x =10; //局部
            System.out.println("x="+x); //輸出10
        }
        int x =100; //全局
        System.out.println("x="+x); //輸出100
    }
}

2、構造代碼塊

將普通代碼塊中提取到類中使用,就形成了構造代碼塊。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Person per1 = new Person();
        Person per2 = new Person();
    }
}

class Person{
    { //構造塊
        System.out.println("構造塊");
    }
    public Person() {
        System.out.println("構造方法");
    }
}

由以上程序運行可知,構造塊優先於構造方法執行,每次實例化對象時構造快都會被重複調用(實際基本用不上)。

3、靜態代碼塊

如果代碼塊中使用了static關鍵字定義,則該代碼塊爲靜態代碼塊:

  • 在非主類中定義的;
  • 在主類中定義的;

【舉例】:非主類中定義的靜態塊

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Person per1 = new Person();
        Person per2 = new Person();

    }
}

class Person{

    public Person() {
        System.out.println("構造方法");
    }

    { //構造塊
        System.out.println("構造塊");
    }

    static { //靜態塊
        System.out.println("靜態塊");
    }
}

由以上運行可知,靜態塊最先執行,並且只執行一次。在非主類中定義 的靜態塊,可以用其爲static屬性初始化,如下:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Person per1 = new Person();
        Person per2 = new Person();

    }
}

class Person{
    private static String msg = "hello";
    private static String info =null;
    public Person() {
        System.out.println("構造方法");
    }

    { //構造塊
        System.out.println("構造塊");
    }

    static { //靜態塊
        System.out.println("靜態塊");
        info = msg+"張三";
        info = info +10;
        System.out.println(info);
    }
}

【舉例】:主類中定義的靜態塊

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.out.println("hello");
    }

    static {
        System.out.println("竟然是我先執行??");
    }
}

以上可以發現,靜態塊優於主方法先執行。

4、總結

代碼塊對於現階段開發意義不大,瞭解即可。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章