1. 程式人生 > >Java中的普通程式碼塊、構造塊、靜態程式碼塊

Java中的普通程式碼塊、構造塊、靜態程式碼塊

程式碼塊

  程式碼塊定義:使用“{}”定義的一段程式碼。   根據程式碼塊定義的位置以及關鍵字,又可分為以下四種:

  • 普通程式碼塊
  • 構造塊
  • 靜態塊
  • 同步程式碼塊

1.1 普通程式碼塊

  普通程式碼塊:定義在方法中的程式碼塊。   範例:觀察普通程式碼塊

public class Test1{
    public static void main(String[] args)
    {
        {
            //普通程式碼塊
            int a=20;
            System.out.println(a);
        }
        int
a=10; System.out.println(a); } }

在這裡插入圖片描述   一般如果方法中程式碼過長,為避免變數重名,使用普通程式碼塊。   程式碼是否可以這樣寫????:

public class Test1{
    public static void main(String[] args)
    {
        int a=10;
        {
            //普通程式碼塊
            int a=20;
            System.out.println(a);
        }
        System.out.println
(a); } }

  不可以!!! 在這裡插入圖片描述   寫程式碼時要注意變數作用域的問題!!!!

1.2 構造塊

  構造塊: 定義在類中的程式碼塊(不加修飾符)   範例:觀察構造塊:

class Person{
	//定義在類中,不加任何修飾符
    {
        System.out.println("Person類的構造塊!");
    }
    //建構函式
    public Person(){
        System.out.println("Person類的建構函式!");
    }
}
public class Test1{
    public static void
main(String[] args) { new Person(); new Person(); } }

在這裡插入圖片描述   通過上述程式碼我們發現:構造塊優先於構造方法執行,每產生一個新的物件就呼叫一次構造塊。 所以構造塊可以進行簡單的邏輯操作(在呼叫構造方法之前)。

1.3 靜態程式碼塊

  靜態程式碼塊: 使用static定義的程式碼塊。   根據靜態塊所在的類不同又可分為以下兩種型別:

  • 在非主類中
  • 在主類中

1.3.1 在非主類中的靜態程式碼塊

  範例:非主類中的靜態程式碼塊:

class Person{
    //構造塊
    {
        System.out.println("Person類的構造塊!");
    }
    //建構函式
    public Person(){
        System.out.println("Person類的建構函式!");
    }
    //靜態塊
    static
    {
        System.out.println("Person類的靜態程式碼塊!");
    }
}
public class Test1{
    public static void main(String[] args)
    {
   	    System.out.println("*******start*********");
        new Person();
        new Person();
        System.out.println("*********end*********");
    }
}

在這裡插入圖片描述   通過以上程式碼,我們可以發現:

  • 在非主類中的靜態塊,在類載入時執行,優先於構造塊執行。
  • 無論產生多少例項化物件,靜態塊都只執行一次。   靜態塊的主要作用是為static屬性進行初始化!!!!!

1.3.2 在主類中的靜態程式碼塊

  範例:主類中的靜態程式碼塊:

public class Test1{
     //構造塊
    {
        System.out.println("Test1類的構造塊!");
    }
    //建構函式
    public Test1(){
        System.out.println("Test1類的建構函式!");
    }
    //靜態塊
    static
    {
        System.out.println("Test1類的靜態程式碼塊!");
    }
    public static void main(String[] args)
    {
        System.out.println("*******start*********");
        new Test1();
        new Test1();
        System.out.println("*********end*********");
    }
}

在這裡插入圖片描述   在主類中定義的靜態塊,優先於主方法(main)執行!!