与任何程序设计语言一样,Java 使用条件语句和循环结构确定控制流程。本节先讨论条件语句,然后讨论循环语句,最后介绍看似有些笨重的 switch 语句,当需要对某个表达式的多个值进行检测时,可以使用 switch 语句。
块作用域
块(block)是指由一对大括号括起来的若干条简单的 Java 语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。
public static void main(String[] args) {
int t = 1;
{
int o = 8;
int ol = 8;
// to do
}
}
条件语句
在 Java 中,条件语句的格式为:
if (condition) statement
这里的条件必须用括号括起来。
与绝大多数程序设计语言一样,Java 常常希望在某个条件为真时执行多条语句。在这种情况下,应该使用块语句(block statement)。
double salary = 50000d;
double target = 48000d;
if (salary > target) {
System.out.println("good");
System.out.println("go to knowledgedict.com");
}
注释:使用块(有时称为复合语句)可以在 Java 程序结构中原本只能放置一条(简单)语句的地方放置多条语句。
在 Java 中,更一般的条件语句格式如下所示:
if (condition1) statement1 else if (condition2) statement2 else statement3
else 子句与最邻近的 if 构成一组。重复地交替出现 if...else if...
是一种很常见的情况。
int hit = 3;
if (hit == 1) {
System.out.println("https");
} else if (hit == 2) {
System.out.println("www");
} else if (hit == 3) {
System.out.println("knowledgedict");
} else {
System.out.println("com");
}
循环
当条件为 true 时,while 循环执行一条语句(也可以是一个语句块)。
while (condition) statement
如果开始循环条件的值就为 false,则 while 循环体一次也不执行。
int count = 0;
while (count > 3) {
// code block to be executed
count++;
}
while 循环语句首先检测循环条件。因此,循环体中的代码有可能不被执行。如果希望循环体至少执行一次,则应该将检测条件放在最后。使用 do/while 循环语句可以实现这种操作方式。
do statement while (condition);
这种循环语句先执行语句(通常是一个语句块)。再检测循环条件,然后重复语句,再检测循环条件,以此类推。
int count = 0;
do {
// code block to be executed
count++;
} while (count > 3);
确定循环
for 循环语句是支持迭代的一种通用结构,利用每次迭代之后更新的计数器或类似的变量来控制迭代次数。
for (statement 1; statement 2; statement 3) {
// code block to be executed
}
- 第 1 部分通常用于对计数器初始化。
- 第 2 部分给出每次新一轮循环执行前要检测的循环条件。
- 第 3 部分指示如何更新计数器。
for (int i = 0; i < 10; i++) {
// code block to be executed
}
多重选择之 switch 语句
在处理多个选项时,使用 if/else 结构显得有些笨拙。Java 有一个与 C/C++ 完全一样的 switch 语句。
switch(expression) {
case x:
// code block
break;
case y:
// code block
break;
default:
// code block
}
switch 语句将从与选项值相匹配的 case 标签处开始执行直到遇到 break 语句,或者执行到 switch 语句的结束处为止。如果没有相匹配的 case 标签,而有 default 子句,就执行这个子句。
警告:有可能触发多个 case 分支。如果在 case 分支语句的末尾没有 break 语句,那么就会接着执行下一个 case 分支语句。这种情况相当危险,常常会引发错误。为此,我们在程序中从不使用 switch 语句。
case 标签可以是:
- 类型为 char、byte、short 或 int 的常量表达式。
- 枚举常量。
- 从 Java SE 7 开始 case 标签还可以是字符串字面量。
中断控制流程语句
Java 中中断控制流程语句,共有 4 种:
- 不带标签的 break 语句。
- 带标签的 break 语句。
- goto 语句(不推荐使用,容易引起错误)。
- continue 语句。
不带标签的 break 的使用,会直接退出最内层循环。
带标签的 break 语句,用于跳出多重嵌套的循环语句。有时候,在嵌套很深的循环语句中会发生一些不可预料的事情。此时,可能更加希望跳到嵌套的所有循环语句之外。通过添加一些额外的条件判断实现各层循环的检测很不方便。
int count = 0;
a:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j == 5) {
break a;
}
count++;
}
}
System.out.println(count);
值得注意的是标签必须放在希望跳出的最外层循环之前,并且必须紧跟一个冒号。
注释:事实上,可以将标签应用到任何语句中,甚至可以应用到 if 语句或者块语句中。
最后,还有一个 continue 语句。与 break 语句一样,它将中断正常的控制流程。continue 语句将控制转移到最内层循环的首部。