流程控制
- 让程序在执行的过程中,更有条理、更有逻辑性
- 流程控制的使用会让代码变得更加复杂
流程控制的分类
- 判断
- 循环
判断
- if 语句
- switch 语句
if语句
if
假如、如果
if (boolean表达式) {
// 条件成立,执行的代码
}
if 语句不需要以 分号 结尾
boolean 表达式常见有
- true/false
- 关系运算表达式
- 逻辑运算表达式
if-else
如果-否则
if (boolean表达式){
// 条件成立执行的代码
}else{
// 条件不成立执行的代码
}
if
多分支条件判断
if(boolean表达式){
// 条件成立执行的代码
}else if(boolean表达式) {
// 条件成立执行的代码
}
...
else{
// 处理其他情况,对程序做兜底处理
}
switch 语句
- 比较善于处理 值为 枚举的 判断
- switch 能处理的数据类型有
- byte (Byte)
- short (Short)
- int (Integer)
- char (Character)
- enum (枚举)
- String
注意:
1.switch 支持的类型
2.在使用 switch 的时候,case 默认会有穿透效果,
使用 break 关键字,来解决穿透效果
switch(变量){
case 值:
code ...
case 值:
code ...
...
default:
code ...
}
补充
- 在 JDK14 中,switch 可以是语句,也可以是表达式
- switch 作为表达式,可以返回数据
- 案例一
int a = 4;
String res = switch(a){
case 1,4 ->{
System.out.println("这是石头");
yield "石头";
}
case 2 -> {//{}内必须是语句
yield "剪刀";
}
/*
case 3 -> yield "布";//错误代码!
如果 case 中,只有一行代码,且省略了 大括号,必须省略 yield
*/
case 3 -> "布";
default -> "无效";
};//作为表达式,返回一个值时,结束处必须分号结束
System.out.println(res);
- 案例二
int a = 2;
switch(a){
case 1,4 -> {
System.out.println("石头");
}
// 如果只有一句,可以省略{}
case 2 -> System.out.println("剪刀");
case 3 ->{
System.out.println("布");
}
default -> {
System.out.println("无效");
}
}
循环
- 计算机比较擅长重复的劳作,在编写的代码的时候,可以将重读的动作进行处理,形成所谓的循环
- 循环: 重复的做某些事情
编写循环的代码, 必须掌握循环的三要素
- 循环的起始条件 (循环从哪里开始)
- 循环的运行条件 (循环代码)
- 控制循环(想方设法让循环能够正常的结束、退出循环)
循环的种类
- while 循环
- do … while 循环
- for 循环
while 循环
循环的起始条件
while(boolean条件) {
循环体
//对循环的控制
}
do … while 循环
do{
循环体
//对循环的控制
}while(boolean条件);
while 循环与 do…while 循环的区别:
- while 循环先判断条件是否成立,若不成立则一次也不会执行,直接跳过循环
- do…while 循环 不会先判断条件,而是先执行循环体一次,再进行判断条件是否成立。
- 循环次数,while 循环至少执行0次,do…while 循环至少执行 1次
while 小考点:
- 案例一
while(true){
System.out.println("hello world");
}
// 报错,虚拟机会检测出来,while()括号内是一个值,并且没检测到控制,认为下面的是垃圾,不允许
System.out.println("over");
- 案例二
while(false){
// 报错,虚拟机会检测出来,while()括号内是一个值,并且没检测到控制,认为下面的是垃圾,不允许
System.out.println("hello world");
}
System.out.println("over");
- 案例三
// 没错,欺骗虚拟机,认为while()括号内是一个变量,可能会发生改变
boolean f = false;
while(f){
System.out.println("hello world");
}
System.out.println("over");
- 案例四
//没错,虚拟机不会检测if
if(false){
System.out.println("hello world");
}
System.out.println("hello world");
- 案例五
//没报错。虽不会检测if后的boolean值,但while循环中看到了break;语法上不会报错。
while(true){
if(false){
break;
}
}
System.out.println("hello world");
循环结束:continue; break;
continue;
跳过本次循环(后面的代码不会执行)进入下一次循环
break;
跳出循环(结束最近的循环结构)
也可指定跳出哪个循环,加标志。
- 默认结束最近的循环结构。
- 后跟标识结束指定循环,如
over:for (int i = 0; i < 4; i++) {
while (true){
if(i == 2){
System.out.println(i);
break over;
// break 后跟标识,结束指定循环
}
i++;
}
}