流程控制语句
1.顺序结构
int a = 4;
int b = 5;
System.out.println(a+b);
比如上面的代码执行顺序是从上往下,这就是顺序结构
总结来说就是:
顺序结构语句是Java程序默认的执行流程,按照代码的先后顺序,从上到下依次执行
2.分支结构
if语句
作用:可以判断条件来决定执行哪个分支
格式1:
if(关系表达式){
语句体;
}
执行流程:
首先计算关系表达式的值
如果关系表达式的值为true就执行语句体
如果关系表达式的值为false就不执行语句体
继续执行后面的其他语句
举例:判断一个人是否成年,条件是年龄age大于等于18则该人已成年
用代码表示:
int age = 32;
if(age >= 18){ //小括号中的就是判断条件,符合则执行小括号后大括号内的语句
System.out.println("您已满18岁,已成年。");
}
格式2:
if(关系表达式){
语句体1;
}else{
语句体2;
}
执行流程:
1.首先计算关系表达式的值
2.如果关系表达式的值为true就执行语句体1
3.如果关系表达式的值为false就执行语句体2
4.继续执行后面的其他语句
同样按照上面判断是否成年的例子
用代码表示:
int age = 15;
if(age >= 18){ //小括号中的就是判断条件,符合则执行小括号后大括号内的语句
System.out.println("您已满18岁,已成年。");
}else{// else的作用就是if()括号内的条件不满足那么则执行else后面大括号{}内的语句
System.out.println("您未满18岁,未成年。");
}
// 分析:age=15小于18不满足条件则不能执行(age >= 18)后面大括号{}里的内容,那么它只能执行else后大括号里的内容。即System.out.println("您未满18岁,未成年。");
格式3:
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}else{
语句体3;
}
执行流程:
首先计算关系表达式1的值
如果为true就执行语句体1;如果为false就计算关系表达式2的值
如果为true就执行语句体2;如果为false就计算关系表达式3的值
.........
如果所以关系表达式结果都为false,就执行语句体n+1。
同样按照上面判断是否成年的例
用代码表示:
int age = 49;
if(age >= 18 && age <120){ //小括号中的就是判断条件,符合则执行小括号后大括号内的语句
System.out.println("您已满18岁,已成年。");
}else if(age < 18){
System.out.println("您未满18岁,未成年。");
}else{
System.out.println("您的年龄输入有误");
}
注意:else if()可能会有多个表示多个条件的判断,但是else只有一个
switch语句
作用:根据表达式的值来进行值匹配选择对应的分支执行。
格式:
switch(表达式){
case值1:
执行代码...;
break;
case值2:
执行代码...;
break;
case值n-1:
执行代码...;
break;
default:
执行代码n;
break;
}
执行流程:
首先计算表达式的值。
依次和case后面的值进行比较如果有对应的值,就会执行相应的语句,在执行的过程甲,遇到break就会结束。
如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后结束整个switch语句。
default的位置和省略
1.位置 :defaule不一定是写在最下面的,我们可以写在任意位置。只不过习惯会写在最下面
2.省略: defaule可以省略,语法不会有问题,但是不建议省略。
if和switch的区别
都是做分支操作的
if的功能更强大适合做区间匹配
如果是值匹配的操作建议用switch,格式清晰,性能较好!!
switch的注意事项
表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long。
case给出的值不允许重复,且只能是字面量,不能是变量。
不要忘记写break,否则会出现穿透现象。
switch的穿透性
是什么?
switch中没有写break,遇到了这个case会一直往下走,直到遇到break才会跳出
适合做什么?
多个值对应的case块的操作是相同的!可以穿透到一个位置集中处理,这样可以提高开发效率,降低代码重复。
swith新特性
// JDK12之前的旧格式
int number = 1;
switch (number){
case 1 :
System.out.println("一");
break;
case 2 :
System.out.println("二");
break;
case 3 :
System.out.println("三");
break;
default :
System.out.println("没有这种选项");
break;
}
// 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("没有这种选项");
}
}
3.循环结构
作用:控制一段代码重复的执行多次
什么是循环?
重复的做某件事情
具有明确的开始和停止标记
循环的分类
for
while
do...while
for循环
格式:
for ( 初始化语句;条件判断语句;条件控制语句){
循环体语句;
}
例如:
for (int i = 1 ;i<= 10 ; i++ ){
System.out.println( "Helloworld" );
}
执行流程:
执行初始化语句
执行条件判断语句,看其结果是true还是false
如果是false,则循环结束
如果是true,执行循环体语句
执行条件控制语句
回到②继续执行条件判断语句
如下图表示:

while循环
格式:
初始化语句;
while(条件判断语句){
循环体语句;
条件控制语句;
}
执行流程:
初始化语句只执行一次
判断语句为true,循环继续
判断语句为false,循环结束

用代码演示如下:
int i = 1;// 初始化语句
while(i <= 100){// 条件判断语句
System.out.println(i);// 循环体语句
i++;// 条件控制语句
}
for和while的对比
相同点:运行规则都是一样的
for和 while的区别:
for循环中,控制循环的变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了。
while循环中,控制循环的变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用。
for和while 的用法区别:
for循环中:知道循环次数或者循环的范围
while循环:不知道循环的次数和范围,只知道循环的结束条件。
do...while循环
格式:
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句);
执行流程:

特点:先执行,后判断。
无线循环
三种格式:
for( ; ; ){
System.out.println("学习");
}
while(true) {
System.out.println("学习");
}
do {
System.out.println("学习");
} while(true);
注意事项
无限循环的下面不能再写其他代码了,因为循环永远停不下来,那么下面的代码永远执行不到
continue和break关键字
1. continue:跳过本次循环,继续执行下次循环。
2. break:结束整个循环。
比如下面的代码:
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
}
运行结果:

使用continue关键字后
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
if(i==3){
continue;
}
System.out.println(i);
}
}
运行结果:

很显然发现当执行到i==3时执行continue跳过了本次循环
使用break关键字
// 使用break关键字
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
if(i==3){
break;
}
System.out.println(i);
}
}
运行结果:

显然发现当执行到break时结束了循环