就像有知觉的生物一样,流程必须在执行过程中控制它的世界,并做出选择。在Java中,你要使用执行控制语句来做出选择。
选择语句
-
if( Boolean-expression ){
statement
} else {
statement
}
else 和它后面的{}可以没有。
布尔表达式必须产生一个布尔结果。 -
switch(integral-selector){
case:integral-value0: statement ; break;
case:integral-value1: statement ; break;
case:integral-value2: statement ; break;
…
default:statement;break;
}
- case和default没有顺序要求。
- 每一个case以及default后面的break都是可选的。若省略的break,代码会接着执行,直到遇到一个break为止。
- case后面的statement可以省略,甚至statement;和break;一起省略,这样可以实现多路选择。
迭代
- while(Boolean-expression){
statement
}
- 会先执行一次Boolean-expression表达式,为true就进入循环体。在循环体执行结束后在执行Boolean-expression表达式,为true进入循环体。反复这个过程。
- do{
statement
} while(Boolean-expression)
- 会先执行一次循环体,循环体之行结束后,执行Boolean-expression表达式,为true接着执行循环体。反复这个过程。
- for(initialization1 ,initialization2 , initialization3 ; Boolean-expression;step){
statement
}
-
先执行initialization1 ,initialization2 , initialization3(nitialization1 ,initialization2 , initialization3一定是同一类型),且只执行一次。
-
接着执行Boolean-expression,为true执行循环体statement。
-
循环体statement执行结束后,执行step“步进”,然后在执行Boolean-expression,为true执行循环体。反复这个过程。
-
initialization1 ,initialization2 , initialization3 中是逗号操作符,而不是逗号分隔符。在方法参数列表中叫逗号分隔符。Java中唯一用到逗号操作符的地方就是for语句中。
- foreach(VariableClassType variable : array-expression or container-expression){
statement
}
- foreach会自动产生每一项,不用通过下标或索引获取。
- array-expression or container-expression可以是产生数组或容器的表达式。
return
- 产生返回值
- 退出方法
break 和 continue
-
break用于强行退出循环,不在执行循环中的剩余语句。即与
for(initialization1 ; Boolean-expression;step){
statement
}
结合使用时,在statement中执行了brack,brack后面的语句不在被执行,step也不在被执行。 -
continue则停止执行当前的迭代,然后退回循环的起始处。即与
for(initialization1 ; Boolean-expression;step){
statement
}
结合使用时,在statement中执行了contiune,contiune后面的语句不在被执行,但step会被执行。然后直接执行Boolean-expression。
臭名昭注的goto
goto是Java中的保留字,但并没有使用它。在Java中使用break和continue加label(标签)来实现和goto一样的功能。但不是跳转,而是中断迭代语句的一种方法。
标签是个跟有冒号的表示符
例 :label:
标签和break、continue、迭代语句一起使用
public class LabeleFor{
public void labelTest(){
int i = 0;
outer: // 第一个标签
for( : true : ){
inner: // 第二个标签
for(; i < 10;i++){
Log.d("TAG" , "i = "+ i);
if( i == 2 ){
Log.d("TAG" , "contiune");
contiune;
}
if( i == 3 ){
Log.d("TAG" , "break");
i++; // 由于执行了break直接中断最接近break得循环 ,
// i++得不到执行,所需要i++,不然程序执行不到3后面。
break;
}
if( i == 7 ){
Log.d("TAG" , "contiune outer");
i++; // 当执行contiune outer时, 直接跳转到outer处,
// 所以for(1;2;3)中第3部分步进不能被执行所以需要i++。
// 不然执行不到7后面
contiune outer;
}
if( i == 8 ){
Log.d("TAG" , "break outer");
i++; // 执行break outer 直接跳到outer处,
// 所以for(1;2;3)中第3部分步进不能被执行所以需要i++
// 和break一样。
break outer;
}
for(int i = 0 ; i < 5 ; i++){
if( i == 3 ){
Log.d("TAG" , "contiune inner");
continue inner;
}
}
}
}
}
}
- Java中需要使用标签的唯一理由就是因为循环嵌套存在,而且想从多层嵌套中break或contiune。
- 当for(1;2;3)和continue 结合使用时,在循环体内执行了continue,但第3部分“步进”还是被执行。当for(1;2;3)和continue label结合使用时,第3部分“步进”不被执行需要注意。