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。