第四章 控制执行流程
4.1 true和false
所有的条件语句都利用条件表达式的真或假来决定执行路径。
4.2 if-else
三种形式
if(Boolean-expression){
Statement
}
if(Boolean-expression){
Statement
}else{
Statement
}
if(Boolean-expression){
Statement
}else if(Boolean-expression){
Statement
}
...
}else{
Statement
}
else子句可以没有。
4.3 迭代
while
while(Boolean-expression){
Statement
}
do-while
do
Statement
while(Boolean-expression);
while和do-while的区别在于do-while中的statement至少会执行一次,而while中的Statement有可能不会执行。
for
for(initialization; Boolean-expression; step){
Statement
}
for循环中包括初始化(initialization)表达式、布尔表达式(Boolean-expression)和步进(step)运算。每一次迭代都会测试布尔表达式,如果所得结果为false,则执行循环体代码,之后进行一次步进运算;如果所得结果为true,则跳出循环。
需要注意的是for循环中,可以定义多个同类型的变量,来操控循环。例如:
for(int i = 1, j = i + 10; i < 5; i++, j = i * 2){
System.out.println("i = " + i + " j = " + j);
}
4.4 Foreach语法
JDK5之后引入的一种更加简洁的for语法,用于数组和容器,不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项。例如:
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);
}
4.5 return
return一方面指定方法返回什么值(如果是void,则没有返回值),另一方面则是退出当前方法。
4.6 break和continue
break用于跳出当前循环,continue用于结束本轮循环,直接进入下一轮循环。
无限循环
while(true){
Statement
}
for(;;){
Statement
}
4.7 臭名昭著的goto
标签的语法:
label1:
使用
lable1:
ourter-iteration {
inner-iteration {
//...
break; // (1)
//...
continue; // (2)
//...
continue label1; // (3)
//...
break label1;
}
}
(1)处的break仅是跳出内层循环;
(2)处的continue仅是结束当前轮次的内层循环,进入下一轮次的内层循环;
(3)处的continue是结束当前轮次的内层循环和外层循环,直接转到label1处,然后进入下一轮次的外层循环;
(4)处的break是结束内层循环和外层循环,直接跳到label1处,但并不进入循环。
一般总结,针对for循环和while循环均有效:
1) 一般的continue会退回最内层循环的开头,并继续执行;
2) 带标签的continue会到达标签的位置,并重新进入紧邻在那个标签后面的循环;
3) 一般的break会中断并跳出当前循环;
4) 带标签的break会中断并跳出标签所指的循环。
Java中需要使用标签的场景主要是在循环嵌套中使用break和continue。
4.9 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后的跟一个变量,该变量类型可以是整数类型(byte/char/short/int/long)、枚举类型和String(JDK 7之后)。