Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java 控制流程


与任何程序设计语言一样,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 种:

  1. 不带标签的 break 语句。
  2. 带标签的 break 语句。
  3. goto 语句(不推荐使用,容易引起错误)。 
  4. 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 语句将控制转移到最内层循环的首部。