03. Java 的流程控制

三种基本结构

顺序结构、循环结构和选择结构是程序设计中常见的三种基本结构,它们共同构建了程序的执行流程:

  1. 顺序结构:就像一条直线,代码按照从上到下的顺序依次执行,一个步骤接着一个步骤。这种结构简单直接,适用于执行一系列连续的操作。
  2. 选择/分支结构:它就像是一个岔路口,根据不同的条件来决定走哪条路。通过选择结构,我们可以根据不同的情况执行不同的代码块,实现灵活的决策和分支处理。
  3. 循环结构:就像一个循环的圈圈,它让代码在满足特定条件的情况下,重复执行一段代码。循环结构可以帮助我们处理大量相似或重复的任务,节省代码量并提高效率。

这三种结构相互结合,使得程序能够根据不同的情况和需求进行灵活的控制和执行。它们是编程的基础,帮助开发者构建出各种功能和逻辑复杂的程序。

顺序结构详解

顺序结构是指按照代码的自然顺序依次执行语句,一个语句执行完后接着执行下一个语句。

选择/分支结构详解

选择结构根据特定的条件来决定执行哪部分代码,可以使用 if-else 语句、switch 语句等。

if 条件语句详解

if 型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (条件) {
语句体...
}

if (条件)
{
语句体...
}

// 如果条件体只有一句话,大括号可以省略但不建议这么做。
if (条件) 单条语句;

if (条件)
单条语句;

这四种写法推荐使用第 1 种,节省行数且结构清晰。

if else 型

1
2
3
4
5
6
if (条件) {
语句体1...
} else {
// 若不满足条件
语句体2...
}

else if 型

else-if 结构实际上是 if-else 结构的多层嵌套,它明显的特点就是在多个分支中只执行一个语句组,而其他分支都不执行,所以这种结构可以用于有多种判断结果的分支中。

1
2
3
4
5
6
7
8
9
if (条件1) {
语句体1...
} else if (条件2) {
语句体2...
} else if (条件3) {
语句体3...
} else {
兜底语句体...
}

if 嵌套组合

if 语句可以任意嵌套。但一般情况下,嵌套层数不建议超过 3 层。

1
2
3
4
5
6
7
8
9
if (条件1) {
if (条件2) {
语句体1...
} else {
语句体2...
}
} else {
语句体3...
}

switch 语句

根据表达式的值执行不同的代码块。

其中 expression 必须为 byte, short, int, char, JDK 1.5 新增 enum 枚举, JDK 1.7 新增 String 类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
case 0: case 1: // 实现了多个 case 对应一种情况
...
break;
case 2: {
// 在 case 语句块中加一对花括号也是可以的
...
break;
}
case 3: // 花括号可以省略
...
break;
default: // default 可选。花括号也是可选的。建议所有的 switch 都加上 default 子句的情况,且 default 子句建议写在最后。
...
break;

注意:

  • 一般每个 case 语句后都会加 break 不要忘记,除非有特殊用途

循环结构

循环结构则允许代码在满足一定条件的情况下重复执行一段代码,例如 for 循环、while 循环和 do-while 循环等。

循环语句

while

1
2
3
4
// while
while (循环条件) {
语句组
}

do while

1
2
3
4
// do while
do {
语句体
} while (循环条件);

注意:do while 循环和 while 循环的区别在于,do while 循环至少会执行一次,而 while 循环则需要满足循环条件才能执行。

for 循环

for 语句是应用最广泛、功能最强的一种循环语句,用于指导固定次数的循环。

1
2
3
for (初始化; 循环条件; 迭代) {
语句体
}

提示 初始化、循环条件以及迭代部分都可以为空语句(但分号不能省略),三者均为空的时候,相当于一个无限循环。代码如下:

1
2
3
4
5
6
7
8
9
// 使用 for, 写的无限循环
for (; ;) {
...
}

// 或者这么搞
while (true) {
...
}

for-each 语句

Java 5 之后推出 foreach 循环语句,使用 for-each 循环不必按照 for 的标准套路编写代码,它是专门为集合和数组的遍历而设计的,注意 foreach 并不是一个关键字。

跳转语句

break、continue、return 和 throw 语句是 Java 语言中常用的跳转语句,本节重点介绍 break 和 continue 语句的使用。

break 语句

break 语句:用于跳出循环或 switch 语句。

在循环体中使用 break 语句有两种方式:带有标签和不带标签。语法格式如下:

1
2
break;           // 不带标签
break label; // 带标签,label 是标签名,例如 label: for 循环

continue 语句

continue 语句:用于跳过当前循环的一次迭代,继续下一次迭代。

在循环体中使用 continue 语句有两种方式可以带有标签,也可以不带标签。语法格式如下:

1
2
continue;          // 不带标签
continue label; // 带标签,label 是标签名,例如 label: while 循环

break 添加标签的意义,添加标签对于多层嵌套循环是很有必要的,适当使用可以提高程序的执行效率。但不建议过多使用,否则程序可读性差,而且容易出错。

break 和 continue 关键字比较

  • break 既用在循环语句中,也可用在条件选择语句中的 switch 语句
  • contine 只用在循环语句中,作用是结束本次循环,接着继续进行条件判断

加餐

表达式与语句

表达式:是用于计算值的代码片段。它可以由变量、常量、运算符和其他表达式组合而成。表达式的目的是求值,并返回一个结果。例如:2 + 3x * ya > b 等都是表达式。

语句:是可执行的代码单元,它可以完成特定的操作。语句不一定返回值,它们的主要目的是改变程序的状态或执行其他相关的操作。例如:if 语句、for 循环、print 语句等都是语句。

表达式通常用于计算、赋值、比较等操作,而语句则用于控制程序的流程、执行特定的功能。在 Java 中,表达式可以出现在语句中,作为语句的一部分。

死循环

循环体内部必须通过语句更改循环变量的值,否则将会发生死循环。

1
2
3
4
5
// 死循环写法一
for (;;)

// 死循环写法二
while (true) {}

参考