判断和循环
流程控制语句
顺序结构
顺序语句是Java程序默认的执行流程,按照代码的先后顺序,从上到下依次执行
分支结构
if语句
if (关系表达式) {
语句体;
}
执行流程:
- 首先计算关系表达式的值
- 如果关系表达式的值为true就执行语句体
- 如果关系表达式的值为false就不执行语句体
- 继续执行后面的其他语句
注意事项:
- 大括号的开头可以另起一行书写,但是建议写在第一行的末尾
- 在语句体中,如果只有一句代码,大括号可以省略不写,建议大括号不要省略
- 如果对一个布尔类型的变量进行判断,不要用==号,直接把变量写在小括号中就可以了
if(flag) {}
if (关系表达式) {
语句体1;
} else {
语句体2;
}
执行流程:
- 首先计算关系表达式的值
- 如果关系表达式的值为true就执行语句体1
- 如果关系表达式的值为false就执行语句体2
- 继续执行后面的其他语句
if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
}
...
else {
语句体n+1;
}
执行流程:
- 首先计算关系表达式1的值
- 如果true就执行语句体1;如果false就计算关系表达式2的值
- 如果为true就执行语句体2;如果为false就计算关系表达式3的值
- .....
- 如果所有表达式结果都为false,就执行语句体n+1
switch语句
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
....
default:
语句体n+1;
break;
}
执行流程:
- 首先计算表达式的值
- 依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束
- 如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后结束整个switch语句
格式说明:
- 表达式:(将要匹配的值)取值为byte、short、int、char。JDK5以后可以是枚举,JDK7以后可以是String
- case:后面跟的要是要和表达式进行比较的值(被匹配的值)
- break:表示中断,结束的意思,用来结束switch语句
- default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似
- case后面的值只能是字面量,不能是变量
- case给出的值不能重复
switch其他知识点
default的位置和省略
位置:default不一定是写在最下面的,我们可以写在任意位置,只不过习惯会写在最下面
省略:default可以省略,语法不会有问题,但是不建议省略
case穿透
产生原因:就是语句体中没有写break导致的
执行流程:
- 首先还是会拿着小括号中表达式的值跟下面每一个case进行匹配
- 如果匹配上了,就会执行对应的语句体,如果此时发现了break,那么结束整个switch语句
- 如果没有发现break语句,那么程序会继续执行下一个case的语句体,一直遇到break或者右大括号为止
使用场景:
如果多个case语句体重复了,那么我们会考虑利用case穿透去简化代码
switch新特性(JDK12以上)
int number = 1;
switch (number){
case 1 -> {
System.out.println("一");
}
case 2 -> {
System.out.println("二");
}
case 3 -> {
System.out.println("三");
}
default -> {
System.out.println("没有这种选项");
}
}
switch和if第三种格式各自的使用场景
if的第三种格式:一般用于对范围的判断
switch:把有限个数据一一列举出来,让我们任选其一
/*需求:键盘录入星期数,输出工作日、休息日*/
switch (week) {
case 1,2,3,4,5 -> System.out.println("工作日");
case 6,7 -> System.out.println("休息日");
default -> System.out.println("没有这个星期");
}
循环语句
for循环
for(初始化语句; 条件判断语句;条件控制语句) {
循环体语句;
}
执行流程:
-
执行初始化语句
-
执行条件判断语句,看其结果是true还是false
- 如果是false,循环结束
- 如果是true,执行循环语句体
-
执行条件控制语句
-
回到2继续执行条件判断语句
while循环
初始化语句;
while(条件判断语句){
循环体语句;
条件控制语句;
}
for和while的对比
相同点:运行规则都是一样的
不同点:
- for循环中,控制循环的变量,因为归属for循环的语法结构,在for循环结束后,就不能再次被访问到了
- while循环中,控制循环的变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
- for循环中:知道循环次数或者循环的范围
- while循环:不知道循环的次数和范围,只知道循环的结束条件
do...while循环
初始化语句;
do {
循环体语句;
条件控制语句;
} while(条件判断语句);
先执行后判断