Java | 流程控制
更新: 2/4/2025 字数: 0 字 时长: 0 分钟
在 Java 程序中,JVM 默认总是顺序执行以分号 ;
结束的语句。
但是,在实际的代码中,程序经常需要做条件判断、循环,因此,需要有多种流程控制语句,来实现程序的跳转和循环等功能。
顺序控制
程序从上到下逐行地执行,中间没有任何判断和跳转。
Java 中定义成员变量时采用合法的前向引用。
java
int num1 = 12;
int num2 = num1 + 2;
java
int num1 = num2 + 2; // 错误
int num2 = 12;
分支控制
让程序有选择的执行。
条件判断
在 Java 程序中,如果要根据条件来决定是否执行某一段代码,就需要
if
语句。根据
if
的计算结果(true
还是false
),JVM 决定是否执行if
语句块(即花括号{}
包含的所有语句)。
java
if (条件) {
// 条件满足时执行
}
java
int age = 20;
if (age >= 18) {
System.out.println("成年人");
}
java
if (条件) {
// 条件满足时执行
} else {
// 条件不满足时执行
}
java
int score = 85;
if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
java
if (条件一) {
// 条件一满足时执行
} else if (条件二) {
// 条件二满足时执行
} else {
// 所有条件都不满足时执行
}
java
int temperature = 25;
if (temperature > 30) {
System.out.println("炎热");
} else if (temperature > 20) {
System.out.println("舒适");
} else {
System.out.println("寒冷");
}
java
if (条件一) {
if (条件二) {
// 条件一和条件二都满足时执行
} else {
// 条件一满足,条件二不满足时执行
}
} else {
// 条件一不满足时执行
System.out.println("条件一不满足");
}
java
int age = 20;
boolean isStudent = true;
if (age > 18) {
if (isStudent) {
System.out.println("成年学生");
} else {
System.out.println("成年工作者");
}
} else {
System.out.println("未成年人");
}
多重选择
除了
if
语句外,还有一种条件判断 。
switch
是根据某个表达式的结果,分别去执行不同的分支。
注意
- 表达式数据类型应和
case
后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int
。 switch
表达式的返回值必须是byte, short, int, char, enum, String
。case
子句中的值必须是常量,而不能是变量。default
子句是可选的,当没有匹配的case
时,执行default
。break
语句用来在执行完一个case
分支后使程序跳出switch
语句块。- 如果没有写
break
,程序会顺序执行到switch
结尾,除非遇到break
。
java
switch (表达式) {
case 常量1:
// 语句块1
break;
case 常量2:
// 语句块2
// 没有 break 则穿透,继续执行下一个 case 语句块
case 常量3:
// 语句块3
break;
// ...
case 常量n:
// 语句块n
break;
default:
// 当没有匹配到任何 case 时,执行 default
break;
}
java
int day = 3;
switch (day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
default:
System.out.println("其他");
break;
}
java
switch (表达式) {
// 使用箭头代替 break
case 常量1 -> // 语句块1
// 允许多个常量放在一个 case 后面
case 常量2, 常量3 -> // 语句块2、3
// 多个语句可以使用大括号来包裹代码块
case 常量4 -> {
// 语句块4
// ...
}
default -> // default 语句块
}
java
int month = 2;
switch (month) {
case 1 -> System.out.println("一月");
case 2, 3 -> System.out.println("二月或三月");
case 4 -> {
System.out.println("四月");
System.out.println("春季");
}
default -> System.out.println("其他月份");
}
循环控制
for
for
循环是一种常用的循环结构,适用于在循环开始前已知循环次数的情况。
java
for (循环变量初始化; 循环条件; 循环变量迭代) {
// 循环体
循环操作;
}
java
for (int i = 0; i < 10; i++) {
System.out.println("Hello, world! " + i);
}
while
while
循环会在满足循环条件的情况下,重复执行循环体。
java
while (循环条件) {
// 循环体
循环操作;
循环变量迭代;
}
java
int i = 0;
while (i < 10) {
System.out.println("Hello, world! " + i);
i++;
}
do while
do while
循环与while
循环类似,但它会先执行一次循环体,然后再判断循环条件。因此,do while
循环至少会执行一次。
java
do {
// 循环体
循环操作;
循环变量迭代;
} while (循环条件);
java
int i = 0;
do {
System.out.println("Hello, world! " + i);
i++;
} while (i < 10);
控制流语句
break
break
语句用于立即终止循环或switch
语句的执行。
java
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 当 i 等于 5 时,跳出循环
}
System.out.println("i = " + i);
}
text
i = 0
i = 1
i = 2
i = 3
i = 4
java
outerLoop:
for (int i = 0; i < 3; i++) {
innerLoop:
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) {
break outerLoop; // 跳出外层循环
}
System.out.println("i = " + i + ", j = " + j);
}
}
text
i = 0, j = 0
i = 0, j = 1
i = 0, j = 2
i = 1, j = 0
continue
continue
语句用于跳过当前循环中的剩余语句,并开始下一次循环。
java
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue; // 当 i 等于 5 时,跳过本次循环
}
System.out.println("i = " + i);
}
text
i = 0
i = 1
i = 2
i = 3
i = 4
i = 6
i = 7
i = 8
i = 9
java
outerLoop:
for (int i = 0; i < 3; i++) {
innerLoop:
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) {
continue outerLoop; // 继续外层循环的下一次迭代
}
System.out.println("i = " + i + ", j = " + j);
}
}
text
i = 0, j = 0
i = 0, j = 1
i = 0, j = 2
i = 1, j = 0
i = 2, j = 0
i = 2, j = 1
i = 2, j = 2
return
return
语句用于从方法中退出,并返回一个值(如果方法有返回值)。
java
public int add(int a, int b) {
return a + b; // 返回 a 和 b 的和
}