流程控制
1.简介
Java使用条件语句和循环结构来确定流程控制。Java没有goto语句,但是可以用带标签的break语句跳出多层循环(C语言用goto实现)。
2.条件语句
在Java中,if语句的代码块只有满足特定条件的情况下才会被执行.
①if语句
if(true|false) {
//执行代码
}
②if-else语句
if(true|false){
//执行代码1
}else{
//执行代码2
}
注意:if和else是一组的,二者有且只有一个会执行
③if-else if-else
if(true|false){
//执行代码1
}
else if(true|false){
//执行代码2
}
…
else{
//执行代码3
}
注意:以上三个代码块也是一组的,有且只有一个会执行
④简写形式
不管是if还是elseif还是else,只要其后面执行的代码"只有一句",那么就可以把大括号去掉,执行效果也是一样的。
例,
public void test(int x) {
if(x>10)
System.out.println("参数大于10");
else if(x>5)
System.out.println("参数大于5");
else if(x>0)
System.out.println("参数大于0");
else
System.out.println("参数小于等于0");
}
注:else语句与最邻近的if构成一组。
3.循环语句
①while循环
语法:
while(循环条件) {
循环体
}
当循环条件为true时,就执行循环代码,否则终止循环;
int result=0;
int i=0;
while(i<=5) {
result = result + i; //result=15
i++;
}
②do-while循环和while非常类似,只不过先执行循环体,然后再判断循环条件.
语法:
do{
循环体
} while(循环条件);
int result = 0;
int i = 0;
do {
result = result + i; //result=15
i++;
} while(i<=5)
③for循环
语法:
for(<初始化>; <条件表达式>; <增量>) {
//要循环执行的代码
}
直到某一次增量执行后,条件表达式的值为false则循环结束
执行步骤:
1.初始化
2.条件表达式
2.1 false则退出循环
2.2 true则执行循环代码
2.3 执行增量变化
2.4 判断条件表达式
false则退出循环
true则执行循环代码
…
int result=0;
for(int i=0;i<=5;i++){
result=result+i; //result=15
}
注:想在外部使用定义在for语句内部的一个变量是错误的,所有要使用for语句内部的一个值,需要在for循环的前面以及外部定义它。
4.switch语句
使用switch语句完成的功能,使用if语句同样也能完成。但是使用if语句完成的功能,使用switch语句却不一定能完成。不过在某些特定的情况下,switch还是有着自己的独特之处。
语法
注意:break关键字表示直接退出整个switch代码块
switch(变量) {
case value1:
//执行代码1;
break;
…
case valueN
//执行代码n;
break;
default:
//执行代码;
break;
}
如果没有匹配的case有default那么就执行这个default语句。
注:switch只能接收byte, short, char或者int类型的变量,如果是JKD1.7那么也可以接收String类型的变量
如果switch的变量与某个case的值匹配,那么就从这个case中的代码开始执行。假如遇到break,就退出整个switch语句,否则(即语句后没有break)依次执行switch语句中后续的case子句,而且不再检查case的值。
5.break和continue
注:break和continue一般都是要结合循环使用的(for/while/do-while)
break:终止当前或指定循环
for(int i=0;i<10;i++){
if(i==3){
break;
}
System.out.println("i = "+i); //i=0,1,2
}
continue:跳过本次循环,执行下一次循环
for(int i=0;i<5;i++){
if(i==3){
continue;
}
System.out.println("i = "+i); //i=0,1,2,4
}
6.停止流程控制语句
尽管Java中有goto关键字,但它并没有被使用仅仅只是作为一个保留字。Java提供了一种label标签来跳出多重循环,使用label可以让break或者continue作用到指定的循环上,否则break或者continue只会默认作用到当前所处的循环上。
f1:for(int i=0;i<3;i++){
for(int j=0;j<5;j++){
if(j==3){
break f1;
}
System.out.println("j = "+j); // j=0,1,2
}
}