第四章 控制执行流程
目录
4.1 true和false
Java不允许将一个数字作为布尔值使用
4.2 if-else
else是可选的
if(Boolean-expression)
statement
或
if(Boolean-expression)
statement
else
statement
statement指用分号结尾的简单语句或复合语句(封闭在花括号里的一组简单语句)
else if:else后面紧跟另一个新的if语句
4.3 迭代
while do-while for用来控制循环,有时将它们划分为迭代语句
while(Boolean-expression)
statement
4.3.1 do-while
do
statement
while(Boolean-Expression);
至少执行一次
4.3.2 for
for(initialization; Boolean-expression; step)
statement
初始化表达式、布尔表达式、步进运算都可以为空
for循环常用于执行“计数”任务
4.3.3 逗号操作符
Java里唯一用到逗号操作符的地方就是for循环的控制表达式
在控制表达式的初始化和步进控制部分,可以使用一系列由逗号分隔的语句,这些语句均会独立执行
通过使用逗号操作符,可以在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);
}
}
}
/* Output:
* i = 1 j = 11
* i = 2 j = 4
* i = 3 j = 6
* i = 4 j = 8
*/
逗号分隔符:分隔函数的不同参数
4.4 Foreach语法
Java SE5引入 用于数组和容器
不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项
import java.util.*;
public class ForEachFloat{
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);
}
}
}
任何返回一个数组的方法都可以使用foreach
public class ForEachString{
public static void main(String[] args) {
for(ch c : "An African Swallow".toCharArray()) {
System.out.println(c + " ");
}
}
}
foreach还可以用于任何Iterable对象
4.5 return
return关键字有两方面的用途:
- 指定一个方法返回什么值(假定它没有void返回值)
- 会导致当前的方法退出,并返回那个值
如果在返回void的方法中没有return语句,那么在该方法的结尾处会有一个隐式的return
4.6 break和continue
在任何迭代语句的主体部分,都可用break和continue控制循环的流程
break:强制退出循环,不执行循环中剩余的语句
continue:停止执行当前的迭代,然后返回循环起始处,开始下一次迭代
4.7 臭名昭著的goto
尽管goto是Java的一个保留字,但并未使用它
Java没有goto,但能完成一些类似于跳转的操作(break continue)
标签:后面跟有冒号的标识符
在Java中,标签起作用的唯一的地方刚好是在迭代语句之前
在迭代前设置标签的唯一理由是:我们希望在其中嵌套另一个迭代或者开关
break和continue关键字通常只中断当前循环,但若随标签一起使用,他们就会中断循环,直到标签所在的地方
public class LabeledFor {
public static void main(String[] args) {
int i = 0;
outer: for(; true; ) {
inner: for(; i<10 ; i++) {
System.out.println("i = " + i);
if(i == 2) {
System.out.println("continue");
continue;
}
if(i == 3) {
System.out.println("break");
i++;
break;
}
if(i == 7) {
System.out.println("continue outer");
i++;
continue outer;
}
if(i == 8) {
System.out.println("break outer");
break outer;
}
for(int k = 0 ; k < 5 ; k++) {
if(k == 3) {
System.out.println("continue inner");
continue inner;
}
}
}
}
}
}
/* Outer:
* i = 0
* continue inner
* i = 1
* continue inner
* i = 2
* continue
* i = 3
* break
* i = 4
* continue inner
* i = 5
* continue inner
* i = 6
* continue inner
* i = 7
* continue outer
* i = 8
* break outer
*/
注意:break会中断for循环,而且在抵达for循环的末尾之前,递增表达式不会执行
由于break跳过了递增表达式,所以在i==3的情况下直接对i执行递增运算
4.8 switch
根据整数表达式的值,switch语句可以从一系列代码中选出一段去执行
switch(integral-selector) {
case integeral-value1: statement; break;
case integeral-value2: statement; break;
case integeral-value3: statement; break;
// ...
default: statement;
}
break是可选的。若省略break,会继续执行后面的case语句,直到遇到一个break为止
switch的选择因子必须是int或char那样的整数值
enum可以和switch协调工作