流程控制语句分类
顺序结构
选择结构
循环结构
跳转语句
顺序结构
从上往下的顺序依次执行
选择结构
if语句
格式一:
if(关系表达式){
语句体;
}
注意:关系表达式的结果都是boolean类型的,不是true就是false。
执行流程:
判断关系表达式的结果,如果为true,就执行语句体;如果为false就不执行语句体。
格式二:
if(关系表达式){
语句体1;
}else {
语句体2;
}
执行流程:
(1)判断if的关系表达式的结果
(2)如果为true,就执行语句体1
(3)如果为false,就执行语句体2
注意:
(1)if...else格式是二选一的关系,要么执行if语句体,要么执行else语句体
(2)if...else格式中的else语句可以省略,省略之后就变成了格式一
(3)if...else格式中的大括号是可以省略的,省略之后控制的是离它最近的那一行代码,如果if或者else语句体中
有多行代码就不能省略。建议不省略大括号
格式三:
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}else if(关系表达式3){
语句体3;
}
...
else{
语句体n+1;
}
执行流程:
(1)首先执行关系表达式1,如果为true,就执行语句体1;执行完之后就结束if...else if...语句
(2)如果为false,就继续执行关系表达式2,如果为true,就执行语句体2;执行完之后就结束if...else if...语句
....
(3)如果所有的关系表达式都为false,则执行else语句中的语句体n+1;
注意:
(1)格式三是多选一,一定会且仅会执行其中的一条语句体
(2)格式三中的else语句可以省略,省略之后就不一定会执行其中的某一条语句体了,建议不省略,因为else是对其他情况的判断
switch语句
格式:
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
...
default:
语句体n+1;
break;
}
执行流程:
(1)将表达式和case的值依次从上往下进行比较,如果和case后面的值1匹配了,就执行语句体1;并结束整个switch语句
(2)如果没有匹配,就继续匹配值2,如果匹配就执行语句体2;
...
(3)如果所有的case后面的值都不匹配就执行default后面的语句体n+1;
注意事项:
(1)表达式只能有以下6种类型:
byte short int char
JDK1.5之后 枚举
JDK1.7之后 String类型
(2)default的位置可以在所有的case之后,也可以在所有的case之前,还可以在多个case之间,甚至还可以省略
不论default的位置在哪里,都不影响执行流程
(3)case穿透问题,case语句中的break是可以省略的,省略之后就会发生case穿透问题,穿透时不再匹配case后面的值了
switch语句结束的条件有两个,一个是碰到break;另一个是碰到switch语句右大括号
循环结构
for循环
格式:
for(初始化表达式;布尔表达式;循环后的操作表达式){
循环体;
}
注意:
初始化表达式只会执行一次
布尔表达式永远比循环后的操作表达式多执行一次
如何获取1~5之间数字之和?
while循环
格式:
while(布尔表达式){
循环体;
}
扩展格式:
初始化表达式;
while(布尔表达式){
循环体;
循环后的操作表达式;
}
do...while循环
格式:
do{
循环体;
}while(布尔表达式);
扩展格式:
初始化表达式;
do{
循环体;
循环后的操作表达式;
}while(布尔表达式);
特点:
至少会执行一次循环体
三种循环的区别
do...while与for和while的区别
do...while至少会执行一次循环体,而for和while要选判断条件成立才会执行循环体
for和while的区别
for循环中的初始化表达式只能在for循环中使用,出了循环就不能再使用
while循环中的初始化表达式,在循环外继续可以使用
跳转语句
break
使用场景:只能在switch语句和循环中使用
作用:结束所在的当前循环
continue
使用场景:只能在循环中
作用:结束本次循环,继续下一次循环
两种死循环
for(;;){
}
while(true){
}
循环嵌套
循环里面还有循环
/*// while循环,打印4行
int i = 0;
while(i<4){// 0~3 4次
// System.out.println("*****");
// while循环,打印5列
int j = 0;
while(j<5){// 0~4 5次
System.out.print("*");// println \n *****
j++;
}
System.out.println();
i++;
}*/
for(int i=0;i<4;i++){// 外层循环控制打印的行数
for (int j = 0; j < 5; j++) {// 内层循环控制每行打印的列数
System.out.print("*");
}
System.out.println();
}