1. 程式人生 > >Java:構造代碼塊,靜態代碼塊

Java:構造代碼塊,靜態代碼塊

isp idt int wid style display 初始 ati 失效


本文內容:

  • 局部代碼塊
  • 構造代碼塊
  • 靜態代碼塊
  • 補充

首發日期:2018-03-28


局部代碼塊:

局部代碼塊用於限制變量的生命周期,如果希望某些變量在某一過程之後直接失效而不希望被後面繼續操作時,可以使用局部變量來限制變量的生命周期帶局部代碼塊中


構造代碼塊:

  • 構造函數只對對應的對象進行初始化,構造代碼塊給類的所有對象進行初始化。
  • 由於構造代碼塊給類的所有對象進行初始化,所以對於每個對象都要初始化成一樣值的變量,可以防止構造代碼塊中初始化。

class Person{
    String gender;
    int age;
    { 
//構造代碼塊 System.out.println("構造代碼塊運行階段"); gender="男"; } Person(){//構造函數 System.out.println("構造函數Person()運行階段"); } Person(int age){//構造函數 System.out.println("構造函數Person(int age)運行階段"); this.age=age; } } public class Demo { public static void
main(String[] args) { Person p1=new Person(); System.out.println(p1.gender); Person p2=new Person(18); System.out.println(p2.gender); } }

上述代碼結果:

構造代碼塊運行階段
構造函數Person()運行階段
男
構造代碼塊運行階段
構造函數Person(int age)運行階段
男

構造代碼塊的好處的例子:

構造函數版本:

技術分享圖片

構造代碼塊版本:

技術分享圖片


靜態代碼塊:

  • 靜態代碼塊與構造代碼塊不同的是,它只執行一次,用於對整個類進行初始化,通常是對類變量進行初始化處理。
  • 靜態代碼塊中只能修改類變量。
  • 靜態代碼塊的執行比主函數要早。
  • 有時候因為靜態代碼塊只執行一次。所以有時候會用來“顯示程序流程”。

class Person{
    static String gender;
    int age;
    static {
        System.out.println("靜態代碼塊執行完成");
        gender="男";//更改的變量只能是類變量
    }
    Person(){//構造函數
        System.out.println("構造函數Person()運行階段");
    }
    Person(int age){//構造函數
        System.out.println("構造函數Person(int age)運行階段");
        this.age=age;
    }
}

public class Demo {

    public static void main(String[] args) {
        Person p1=new Person();
        System.out.println(p1.gender);
        Person p2=new Person(18);
        System.out.println(p2.gender);

    }

}

上述代碼執行結果:

靜態代碼塊執行完成
構造函數Person()運行階段
男
構造函數Person(int age)運行階段
男


補充:

  • 各個初始化塊的運行順序:靜態代碼塊-》構造代碼塊-》構造方法


Java:構造代碼塊,靜態代碼塊