在 Java 中,涉及的关键字包括 if-else,while,do-while,for,return,break 和选择语句 switch。
true和false
所有的条件语句都利用条件表达式的“真”或“假”来决定执行路径。举例: a == b
。它利用了条件表达式 ==
来比较 a 与 b 的值是否相等。 该表达式返回 true
或 false
。
// control/TrueFalse.java
public class TrueFalse {
public static void main(String[] args) {
System.out.println(1 == 1);
System.out.println(1 == 2);
}
}
输出:
true false
if-else
if-else
语句是控制程序执行流程最基本的形式。 其中 else
是可选的,因此可以有两种形式的 if
。代码示例:
if(Boolean-expression)
“statement”
或
if(Boolean-expression)
“statement”
else
“statement”
迭代语句
while
,do-while
和 for
用来控制循环语句(有时也称迭代语句)。只有控制循环的布尔表达式计算结果为 false,循环语句才会停止。
逗号操作符
在 Java 中逗号运算符(这里并非指我们平常用于分隔定义和方法参数的逗号分隔符)仅有一种用法:在 for 循环的初始化和步进控制中定义多个变量。我们可以使用逗号分隔多个语句,并按顺序计算这些语句。注意:要求定义的变量类型相同。代码示例:
public class CommaOperator {
public static void main(String[] args) {
for(int i = 1, j = i + 10; i < 5; i++, j = i * 2) {
System.out.println("i = " + i + " j = " + j);
}
}
}
输出结果:
i = 1 j = 11
i = 2 j = 4
i = 3 j = 6
i = 4 j = 8
for-in语法
简洁的“增强版 for 循环”语法来操纵数组和集合。
for-in 无需创建 int 变量和步进来控制循环计数。 下面我们来遍历获取 float 数组中的元素。代码示例:
这是传统的for循环的方法:
// control/ForInFloat.java
import java.util.*;
public class ForInFloat {
public static void main(String[] args) {
Random rand = new Random(47);
float[] f = new float[10];
for(int i = 0; i < 10; i++)
f[i] = rand.nextFloat();
for(float x : f)
System.out.println(x);
}
}
这是for-in
的用法,代码如下:
for(float x : f) {
这条语句定义了一个 float 类型的变量 x,继而将每一个 f 的元素赋值给它。
任何一个返回数组的方法都可以使用 for-in
循环语法来遍历元素。例如 String
类有一个方法 toCharArray()
,返回值类型为 char 数组,我们可以很容易地在 for-in
循环中遍历它。代码示例:
public class ForInString {
public static void main(String[] args) {
for(char c: "An African Swallow".toCharArray())
System.out.print(c + " ");
}
}
输出结果是:
A n A f r i c a n S w a l l o w
很快我们能在 集合 章节里学习到,for-in
循环适用于任何可迭代(iterable)的 对象。
return
在 Java 中有几个关键字代表无条件分支,这意味无需任何测试即可发生。这些关键字包括 return
,break
,continue
和跳转到带标签语句的方法,类似于其他语言中的 goto。
return 关键字有两方面的作用:
- 指定一个方法返回值 (在方法返回类型非 void 的情况下);
- 退出当前方法,并返回作用 1 中值。
代码示例:
// control/TestWithReturn.java
public class TestWithReturn {
static int test(int testval, int target) {
if(testval > target)
return +1;
if(testval < target)
return -1;
return 0; // Match
}
public static void main(String[] args) {
System.out.println(test(10, 5));
System.out.println(test(5, 10));
System.out.println(test(5, 5));
}
}
输出结果:
1
-1
0
break和continue
break
表示跳出当前循环体。而 continue
表示停止本次循环,开始下一次循环。
下例向大家展示 break
和 continue
在 for
、while
循环中的使用。代码示例:
// control/BreakAndContinue.java
// Break 和 continue 关键字
import static onjava.Range.*;
public class BreakAndContinue {
public static void main(String[] args) {
for(int i = 0; i < 100; i++) { // [1]
if(i == 74) break; // 跳出循环
if(i % 9 != 0) continue; // 下一次循环
System.out.print(i + " ");
}
System.out.println();
// 使用 for-in 循环:
for(int i : range(100)) { // [2]
if(i == 74) break; // 跳出循环
if(i % 9 != 0) continue; // 下一次循环
System.out.print(i + " ");
}
System.out.println();
int i = 0;
// "无限循环":
while(true) { // [3]
i++;
int j = i * 27;
if(j == 1269) break; // 跳出循环
if(i % 10 != 0) continue; // 循环顶部
System.out.print(i + " ");
}
}
}
输出结果:
0 9 18 27 36 45 54 63 72
0 9 18 27 36 45 54 63 72
10 20 30 40
switch
switch
有时也被划归为一种选择语句。根据整数表达式的值,switch
语句可以从一系列代码中选出一段去执行。它的格式如下:
switch(integral-selector) {
case integral-value1 : statement; break;
case integral-value2 : statement; break;
case integral-value3 : statement; break;
case integral-value4 : statement; break;
case integral-value5 : statement; break;
// ...
default: statement;
}
switch(c) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u': System.out.println("vowel");
break;
case 'y':
case 'w': System.out.println("Sometimes vowel");
break;
default: System.out.println("consonant");
其中,integral-selector (整数选择因子)是一个能够产生整数值的表达式,switch 能够将这个表达式的结果与每个 integral-value (整数值)相比较。若发现相符的,就执行对应的语句(简单或复合语句,其中并不需要括号)。若没有发现相符的,就执行 default 语句。
每个 case 均以一个 break 结尾。这样可使执行流程跳转至 switch 主体的末尾。这是构建 switch 语句的一种传统方式,但 break 是可选的。若省略 break, 会继续执行后面的 case 语句的代码,直到遇到一个 break 为止。
switch字符串
Java 7 增加了在字符串上 switch 的用法。 下例展示了从一组 String 中选择可能值的传统方法,以及新式方法:
switch(color) {
case "red":
System.out.println("RED");
break;
case "green":
System.out.println("GREEN");
break;
case "blue":
System.out.println("BLUE");
break;
case "yellow":
System.out.println("YELLOW");
break;
default:
System.out.println("Unknown");
break;