流程控制结构
顺序结构
1.顺序结构语句时Java程序默认的执行流程,按照代码的先后顺序,从上到下依次执行。
分支结构
- if:
//第一种格式,先判断关系表达式的值,若为真,执行语句体,否则不执行
//若括号内只有一句代码,那么花括号可以不写,但建议不要省略
//如果对一个布尔类型的变量进行判断,直接把变量写在if()括号中
if(关系表达式){
语句体;
}
//第二种格式,先判断关系表达式的值,若为真,执行语句体1,否则执行语句体2
if(关系表达式){
语句体1;
} else{
语句体2;
}
//第三种格式(相当于在else中嵌套了另一个判断)
if(关系表达式1){
语句体1;
} else if(关系表达式2){
语句体2;
}
……
else{
语句体 n + 1;
}
- switch
/* 执行过程:
1.首先计算表达式的值。
2.依次和case后面的值进行比较,有对应的值就执行相应的语句,
遇到break就会结束switch语句。
3.如果所有的case后面的值和表达式的值都不匹配,就会执行
default里面的语句体,然后结束整个switch语句。
注意:表达式中数据类型只能是 byte、short、int、char,
jdk5后可以是枚举,jdk7后可以是String。
case给出的值不允许重复。
break不要忘记写。
*/
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
……
default:
语句体 n + 1;
break;
}
switch补充
1.default的位置和省略:default可以省略,语法不会有问题,但是不建议省略(default作用是兜底,所以一般是不省略同时放最后,但实际上default的位置不会影响代码的执行,只是习惯)
2.case穿透:根本原因是语句体中没有写break。执行的流程为:小括号中表达式的值于下面每一个case进行匹配,如果匹配上了就会执行对应语句 ,如果执行完没有发现break,那么程序会继续执行下一个case的语句体(不需要表达式的值与case匹配!),知道遇到break或者右花括号为止。当语句体重复的时候可以考虑使用case穿透。
3.switch新特性(JDK12之后才有),主要是格式稍微发生了变化,在花括号中也可以不写break了。如果语句体中只有一行,那么可以直接去掉花括号,同时也不用写break,可以有效减少代码的书写。
switch和if的使用场景
当场景是对范围进行的判断时,使用if会更加地方便,而在所有情况都穷举出来后任选其一的场景,使用switch会比较方便.
循环结构
循环的类别
- for
- while
- do...while
for循环
1.执行流程
- 执行初始化语句
- 执行条件判断语句,若是false,循环结束,若是true,执行循环体语句
- 执行条件控制语句
2.初始化语句只会执行一次,初始化语句,条件判断语句,条件控制语句都可以为空(按照实际情况使用)
//格式
for(初始化语句;条件判断语句;条件控制语句){
循环体语句;
}
//实例,重复打印十次HelloWorld
for(int i = 1;i <= 10;i++){
System.out.println("HelloWorld");
}
while循环
1.执行流程与for循环一致。
//格式
初始化语句;
while(条件判断语句){
循环体语句;
条件控制语句;
}
for循环与while循环的区别
1.for循环和while循环的主要区别是初始化语句中定义的变量,在for循环中,初始化语句因为是属于for语句的,因此在for循环结束后变量不可以再使用,而在while循环中,初始化语句是在while语句外,所以可以继续使用。
2.for循环一般是在知道循环次数或者循环的范围时进行使用。
3.while循环一般是在不知道循环的次数和范围,只知道循环的结束条件时使用。