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

Java 條件語句完全指南:if/else/else-if 語法、塊結構與最佳實踐

     編輯:Java 綜合教學

Java 條件語句完全指南

條件語句讓程序根據布爾表達式選擇執行路徑。Java 提供 if、if-else、if-else if-else 三種形式,以及 switch 多分支(另文詳解)。

1. 單分支 if

if (條件表達式) 
    功能語句; // 單句可無大括號

// 推薦:始終使用塊結構
if (條件表達式) {
    功能語句塊; // 多語句、可讀性強、防錯
}
  • 條件必須為 boolean 類型
  • if (condition); 後加分號 = 空語句體,極易產生邏輯 Bug

示例

int a = 10;
if (a >= 0) System.out.println("a 是正數或零");
if (a % 2 == 0) System.out.println("a 是偶數");

2. 雙分支 if-else

if (條件) {
    真分支語句塊;
} else {
    假分支語句塊;
}
  • 互斥執行:有且僅有一個分支執行
  • else 可選,但「防御性編程」建議寫上(即使為空),明確意圖

示例:奇偶判斷

int n = 12;
if (n % 2 != 0) {
    System.out.println("n 是奇數");
} else {
    System.out.println("n 不是奇數"); // 輸出此行
}

3. 多分支 if-else if-else

if (條件1) {
    分支1;
} else if (條件2) {
    分支2;
} else if (條件3) {
    分支3;
} 
// ... 任意多 else if
else {
    默認分支; // 可選
}
  • 自上而下順序匹配,首個滿足條件的分支執行,其餘跳過
  • 條件順序至關重要:具體條件前置,通用條件後置

示例 1:月份天數(非閏年)

int month = 3, days = 0;
if (month == 1) days = 31;
else if (month == 2) days = 28;
else if (month == 3) days = 31;
else if (month == 4) days = 30;
// ... 12 月
System.out.println(days); // 31

示例 2:百分制轉等級(區間判斷順序關鍵)

int score = 87;
if (score >= 90) System.out.println('A');
else if (score >= 80) System.out.println('B'); // 命中此處
else if (score >= 70) System.out.println('C');
else if (score >= 60) System.out.println('D');
else System.out.println('E');

⚠️ 若順序顛倒(如先判 >=60),87 會被誤判為 D。

4. 嵌套 if 與 else 匹配規則

if (cond1)
    if (cond2)
        stmt1;
else
    stmt2; // 此 else 匹配「最近的未配對 if」即 cond2

✅ 解決:用大括號明確結構

if (cond1) {
    if (cond2) {
        stmt1;
    }
} else {
    stmt2; // 明確屬於 cond1
}

5. 實戰最佳實踐

  1. 衛語句:提前返回/拋異常,減少嵌套
    public void process(User u) {
        if (u == null) return; // 衛語句
        if (!u.isActive()) throw new IllegalStateException();
        // 核心邏輯平鋪
    }
  2. 條件提取為方法:if (isEligible(user)) 而非 if (user.age>18 && user.score>60 && ...)
  3. 避免布爾標記控制流:用多態/策略模式替代巨大 if-else 鏈
  4. Switch 表達式:Java 12+ 支持 yield,Java 14+ 標準化,更適合枚舉/常值匹配

常見陷阱

代碼問題修正
if (a = 1)賦值而非比較if (a == 1) 或 if (1 == a) (Yoda 寫法防錯)
if (str == "abc")引用比較if ("abc".equals(str))
if (list.size() > 0)非空判斷if (!list.isEmpty())
浮點數 ==精度誤差Math.abs(a-b) < 1e-9
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved