JavaSE|代碼塊

普通代碼塊

普通代碼塊:定義在方法中的代碼塊

public class Test{
public static void main(String[] args) {
{ //直接使用{}定義,普通方法塊
   int x = 10 ;
   System.out.println("x = " +x);
}
   int x = 100 ;
   System.out.println("x = " +x);
 }
}

應用場景:如果方法中代碼過長,爲避免變量重名,使用普通代碼塊。

構造塊

構造塊:定義在類中的代碼塊(不加修飾)


class Person{
{ //定義在類中,不加任何修飾符,構造塊
   System.out.println("1.Person類的構造塊");
}
public Person(){
    System.out.println("2.Person類的構造方法");
 }
}
public class Test{
public static void main(String[] args) {
   new Person();
   new Person();
  }
}

應用場景:構造塊優先於構造方法執行,每產生一個新的對象就調用一次構造塊,構造塊可以進行簡單的邏輯操作(在調用構造方法前)

靜態代碼塊

靜態代碼塊:使用static定義的代碼塊
分爲兩種類型:在非主類中和在主類中

在非主類中的靜態代碼塊


class Person{
{ //定義在類中,不加任何修飾符,構造塊
System.out.println("1.Person類的構造塊");
}
public Person(){
System.out.println("2.Person類的構造方法");
}
static { //定義在非主類中的靜態塊
System.out.println("3.Person類的靜態塊");
}
}
public class Test{
public static void main(String[] args) {
System.out.println("--start--");
new Person();
new Person();
System.out.println("--end--");
}
}

應用場景:

  1. 靜態塊優先於構造塊執行。
  2. 無論產生多少實例化對象,靜態塊都只執行一次
    靜態塊的主要作用是爲static屬性進行初始化

在主類中的代碼塊

public class Test{
{
System.out.println("1.Test的構造塊");
}
public Test(){
System.out.println("2.Test的構造方法");
}
static{
System.out.println("3.Test的靜態塊");
}
public static void main(String[] args) {
System.out.println("--start--");
new Test();
new Test();
System.out.println("--end--");
}
}

在主類的靜態代碼塊,優於主方法執行

練習

class HelloA {
    //構造方法
    public HelloA(){
        System.out.println("Hello A!父類構造方法");
    }
    //非靜態代碼塊
    {
        System.out.println("i'm A class.父類非靜態代碼塊");
    }
    //靜態代碼塊
    static{
        System.out.println("static A 父類靜態代碼塊");
    }
}
public class HelloB extends HelloA {
    //構造方法
    public HelloB(){
        System.out.println("Hello B! 構造方法");
    }
    //非靜態代碼塊
    {
        System.out.println("i'm B class.非靜態代碼塊");
    }
    //靜態代碼塊
    static{
        System.out.println("static B 靜態代碼塊");
    }
    public static void main(String[] args) {
        System.out.println("---start---");
        new HelloB();
        new HelloB();
        System.out.println("---end---");
    }
}


在這裏插入圖片描述

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