首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 標籤語句與程式碼區塊深度解析:合法用法、作用域隔離、break/continue 進階控制

     編輯:Java 程式設計入門

一、普通程式碼區塊 { ... }

1. 類別層級(實例初始化區塊)

public class Demo {
    { // 實例初始化區塊
        System.out.println("建立實例時執行");
    }
    static { // 靜態初始化區塊
        System.out.println("類別載入時執行");
    }
}
  • 實例區塊:每 new 一次執行一次,先於建構子。
  • 靜態區塊:類別初始化時執行一次,常用於單例模式複雜初始化。

2. 方法內區塊:僅作用域隔離

void method() {
    { int x = 1; } // x 只在這裡可見
    { int x = 2; } // 合法:不同區塊可重複變數名
}

⚠️ 無其他語意:不建立新堆疊幀、不影響效能、僅限制變數可見範圍。

二、標籤語句 label: 合法語法

標籤必須緊接一個語句,該語句若為宣告/運算式需用 {} 包成複合語句。

❌ 錯誤寫法

label1: int i = 0;          // 編譯錯誤:單行宣告非語句
label2: int j;              // 錯誤:未初始化
label3: if (flag) break label3; // 錯誤:break 目標需為區塊

✅ 正確寫法

// 1. 標籤 + 區塊(最常用)
outer: {
    int x = 1;
    if (cond) break outer; // 跳出區塊
    System.out.println("不會執行");
}

// 2. 標籤 + 迴圈(break/continue 指定層級)
outerLoop: for (int i = 0; i < 10; i++) {
    innerLoop: for (int j = 0; j < 10; j++) {
        if (i * j > 20) break outerLoop; // 直接跳出雙層
    }
}

三、if () {} 中的 {} 與 if () 是獨立語法

if (cond)          // if 語句
    statement;     // 單一語句(可為區塊、宣告、運算式等)

if (cond) {        // if 語句
    // 區塊語句(複合語句)
}

結論:if、for、while 後面接的是「語句」;{} 是「區塊語句」的一種。兩者正交,非綁定關係。

四、實務建議

  1. 方法內區塊極少使用,需隔離變數時優先抽取方法。
  2. 標籤 break/continue 僅用於多層迴圈跳出,避免濫用導致義大利麵代碼。
  3. 單行 if/for 務必加大括號,防止維護時漏行 Bug。

五、總結

理解「語句」與「區塊」的語法分層,能寫出編譯器接受、同事易讀、除錯不踩雷的代碼。標籤語句是結構化 goto 的受限形式,善用於多層迴圈一次跳出,其餘場合請用方法抽取、布林旗標、異常等更清晰的控制流手段。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved