Skip to content

Java流程控制语句 ​

本文为初学者讲解Java中常用的流程控制语句,包括if-else、switch、for、while和foreach(增强型for循环)。这些语句在Spring Boot企业级应用开发中广泛用于控制程序逻辑流程。每种流程控制语句将按照以下结构介绍:概念及特点、示例代码、常见误区。


1. if-else(条件语句) ​

概念及特点 ​

if-else语句用于根据条件执行不同的代码块。if检查条件是否为true,若为true则执行其代码块,否则执行else代码块(如果存在)。在Spring Boot中,if-else常用于业务逻辑判断,如用户权限检查、输入验证等。

特点:

  • 支持嵌套条件,允许多层if-else结构。
  • 可省略else分支,仅使用if。
  • 条件表达式必须返回boolean类型。

示例代码 ​

java
public class IfElseDemo {
    public static void main(String[] args) {
        int score = 85;
        if (score >= 90) {
            System.out.println("Grade: A");
        } else if (score >= 80) {
            System.out.println("Grade: B");
        } else {
            System.out.println("Grade: C");
        }
    }
}

输出:

Grade: B

常见误区 ​

  • 条件表达式错误:使用赋值运算符=代替比较运算符==,导致条件始终为true。例如,if (x = 5)会将5赋给x并执行if块。
  • 过多嵌套:过多的if-else嵌套使代码难以阅读,建议使用switch或提取方法重构。
  • 忽略边界值:如在分数判断中漏掉边界条件(例如score == 90),可能导致逻辑错误。

2. switch(开关语句) ​

概念及特点 ​

switch语句根据表达式的值选择执行对应的case分支,适用于多分支条件选择。Java 12及以上版本支持switch表达式,简化代码。Spring Boot中,switch常用于处理枚举类型或固定值匹配,如状态码处理。

特点:

  • 支持byte、short、int、char、String、enum等类型(Java 7起支持String)。
  • 每个case需以break结束,否则会“穿透”执行后续case。
  • default分支处理未匹配的情况,可选。

示例代码 ​

java
public class SwitchDemo {
    public static void main(String[] args) {
        String day = "MONDAY";
        switch (day) {
            case "MONDAY":
                System.out.println("Start of the week!");
                break;
            case "FRIDAY":
                System.out.println("Weekend is coming!");
                break;
            default:
                System.out.println("Regular day.");
        }
    }
}

输出:

Start of the week!

常见误区 ​

  • 遗漏break:未在case后添加break会导致“穿透”,执行后续case代码。例如,遗漏break可能导致MONDAY输出多个语句。
  • 类型不匹配:switch表达式的类型必须与case值类型一致,例如不能用double值。
  • 过度使用:当分支逻辑复杂时,switch可能不如if-else或多态设计清晰。

3. for(循环语句) ​

概念及特点 ​

for循环用于已知迭代次数的场景,包含初始化、条件、更新三个部分。Spring Boot中常用于处理固定长度的列表或数组,如批量处理数据。

特点:

  • 语法结构为for (初始化; 条件; 更新)。
  • 适合明确循环次数的场景。
  • 支持嵌套循环,但需注意性能。

示例代码 ​

java
public class ForDemo {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.println("Count: " + i);
        }
    }
}

输出:

Count: 1
Count: 2
Count: 3
Count: 4
Count: 5

常见误区 ​

  • 越界错误:数组或集合索引从0开始,循环条件写成i <= array.length可能导致ArrayIndexOutOfBoundsException。
  • 无限循环:更新语句错误(如i--误写为i++)可能导致无限循环。
  • 性能问题:在循环中重复计算不变的值(如array.length)应提取到循环外。

4. while(条件循环) ​

概念及特点 ​

while循环在条件为true时反复执行代码块,适合未知迭代次数的场景。Spring Boot中常用于处理动态条件,如读取流数据或等待事件。

特点:

  • 语法为while (条件),条件为true时执行。
  • 需确保条件最终变为false,否则导致无限循环。
  • 可与break或continue控制循环流程。

示例代码 ​

java
public class WhileDemo {
    public static void main(String[] args) {
        int count = 1;
        while (count <= 5) {
            System.out.println("Count: " + count);
            count++;
        }
    }
}

输出:

Count: 1
Count: 2
Count: 3
Count: 4
Count: 5

常见误区 ​

  • 无限循环:遗漏更新条件(如count++)会导致无限循环,占用系统资源。
  • 条件未初始化:在循环前未正确初始化条件变量,可能导致意外行为。
  • 复杂条件:条件逻辑过于复杂可能降低可读性,建议简化或提取方法。

5. foreach(增强型for循环) ​

概念及特点 ​

增强型for循环(foreach)用于遍历数组或Iterable对象(如List、Set)。Spring Boot中常用于处理集合数据,如遍历查询结果或JSON列表。

特点:

  • 语法简洁,形如for (类型 变量 : 集合)。
  • 适合只读遍历,无法直接修改集合结构。
  • 提高代码可读性,减少索引错误。

示例代码 ​

java
public class ForeachDemo {
    public static void main(String[] args) {
        String[] fruits = {"Apple", "Banana", "Orange"};
        for (String fruit : fruits) {
            System.out.println("Fruit: " + fruit);
        }
    }
}

输出:

Fruit: Apple
Fruit: Banana
Fruit: Orange

常见误区 ​

  • 修改集合:在foreach中修改集合(如添加/删除元素)可能抛出ConcurrentModificationException,需使用普通for或迭代器。
  • 误用数组索引:foreach无法直接访问索引,若需索引需使用传统for循环。
  • 空集合检查:遍历前未检查集合是否为空,可能导致NullPointerException。