程序的基本结构: 顺序结构:按照代码自上而下执行
流程控制:
代码在执行过程中需要进行逻辑处理(代码要跳到哪一行)
分类:
流程控制语句
分支结构:
条件判断语句:if语句
条件选择语句:switch语句
循环结构:
for语句
while语句
do...while语句
if语句:
if语句的第一种格式:
if(条件判断语句){
语句体;
}
执行流程:1.先看条件判断语句的结果是true还是false
2.如果是false,if语句结束
如果是true,执行语句体,if语句结束;
if语句的第二种格式:
if(条件判断语句){
语句体1;
}else{
语句体2;
}
执行流程:1.先看条件判断语句的结果是true还是false
2.如果是true,执行语句体1,if语句结束
如果是false,执行语句体2,if语句结束;
if语句的第三种格式:
if(条件判断语句1){
语句体1;
}else if(条件判断语句2){
语句体2;
}
...
else if(条件判断语句n){
语句体n;
}else{
语句体n+1;
}
执行流程:1.先看条件判断语句1的结果是true还是false;
2.如果是true,执行语句体1,if语句结束;
如果是false,看条件判断语句2的结果是true还是false;
...
3.当所有的条件判断语句结果都为false时,执行语句体n+1;
if语句的注意事项:
1.if语句第二种格式和三元运算符比较相似,推荐使用if语句的第二种格式,因为它可以在里面编写多行代码;而三元运算符只能编写指定的值,无法编写多行代码语句
2.if语句第三种格式中else可以省略,但是不推荐
switch语句:
格式:
switch(选择值){
case 选择值1:
语句体1;
break;
case 选择值2:
语句体2;
break;
...
case 选择值n:
语句体n;
break;
default:
语句体n+1;
break;
}
执行流程:
1.确定选择值的结果是多少
2.将选择值1和选择值进行匹配,看是否匹配成功;
3.如果匹配成功,执行语句体1,执行break,switch语句结束;
如果匹配失败,将选择值2和选择值进行匹配,看是否匹配成功
...
4.当所有的选择值都匹配失败,执行deault语句n+1,执行break;switch语句结束;
switch语句的注意事项:
1.switch语句()中数据的仅支持固定的几个:
基本类型:仅支持int类型,因为自动转换原因可以衍生支持byte,short,char
引用类型:
在JDK5.0(包含)支持了枚举类型Enum;
在JDK7.0(包含)支持了字符串类型String
2.switch语句中default和case的顺序可以调换,对执行流程没有任何影响,但是不推荐;
3.和if语句第三种格式一样,default语句可以省略不写,但不推荐
4.switch语句break语句可以省略不写,但是会出现case穿透
if和switch的区别:
在实际开发中,更推荐使用if格式,不推荐使用switch,if可以针对范围进行判断,switch语句只能针对单个值进行选择,具有一定局限性;同时也需要了解,在底层执行的过程中,switch语句执行效率要比if语句高,但是在硬件过剩的今天这点效率在开发中可以忽略不计
for语句
格式:
for(初始化语句;循环条件语句;迭代语句){
循环体语句;
}
执行流程:
1.先执行初始化语句;
2.看循环条件语句的结果是true还是false
3.如果是true,执行循环体语句
如果是false,for语句结束
4.执行迭代语句
5.跳回第二步继续执行
while语句
格式:
while(循环条件语句){
循环体语句;
}
执行流程:1.看循环条件语句的结果是true还是false;
2.如果是false,while语句结束
如果是true,执行循环体语句
3.跳回第一步,继续执行;
do...while语句
格式:
do{
循环体语句;
}while(循环条件语句);
执行流程:1.先执行循环体语句;
2.确认循环条件语句的结果是true还是false
3.如果是false,do while语句结束
如果是true,跳回第一步,继续执行
三种循环语句的区别:
1.处理循环方式不同
for,while先判断,后使用
do...while 先使用后判断
2.当循环条件语句结果为false时,循环体语句至少执行的次数
for,while至少执行0次
do...while至少执行1次
3.实际应用场景
有明显循环次数或循环范围,选择for语句
没有明显循环次数或循环范围,选择while语句
流程控制语句的注意事项:
if,for,while如果语句体有且仅有一条语句的时候,{}可以省略不写,但是不推荐;
控制语句
在程序中针对流程控制语句和流程控制代码块进行控制操作的关键字
分类:
break
场景:
(1)switch语句中
(2)循环语句中
作用:
(1)结束switch语句
(2)结束循环语句(如果当前是多个循环进行嵌套,break只能结束离自己最近的循环语句)
continue
场景:
循环语句中
作用:结束本次循环,进入下一次循环
注意:
在控制语句相同的作用域内,其后面不允许编写任何代码,因为永远执行不到
死循环:
在程序中,循环条件语句的结果永远为true的循环语句
分类:
for语句的死循环
while语句的死循环
格式:
for语句的死循环:
for(;;){
循环体语句
}
while语句的死循环:
while(true){
循环体语句
}
注意:
1.死循环并不是永远无法停下来的循环,而是循环条件语句没有或永远为true,可以在循环体语句中通过break进行停止
2.一旦死循环语句无法停止,相同作用域内后面不能编写任何代码否则永远执行不到
3.在初学阶段,更推荐使用while循环的死循环格式;因为它负责没有明显循环范围的领域;后期更推荐使用for的死循环格式,因为for语句的死循环格式执行效率更高
循环嵌套:
在一个循环语句的循环体中存在另外一个循环语句
外层循环:循环嵌套外层的循环语句
内层循环:循环嵌套内层的循环语句
外层循环语句和内层循环语句是一个相对的概念
循环嵌套语句格式:
for(外层嵌套循环的初始化语句;外层循环的循环条件语句;外层循环的迭代语句){
for(内层嵌套循环的初始化语句;内层循环的循环条件语句;内层循环的迭代语句){
内层循环的循环体语句
}
}
执行流程:1.先执行外层嵌套循环的初始化语句
2.确认外层循环的循环条件语句结果是true还是false
3.如果是false,循环嵌套语句结束;
如果是true,开始执行外层嵌套循环的循环体语句(内层循环语句,也就是第(1)步)
(1)先执行内层嵌套循环的初始化语句
(2)确认内层循环的循环条件语句结果是true还是false
(3)如果是false,内层循环语句结束,继续执行第4步
如果是true,执行内层循环的循环体语句
(4)执行内层循环的迭代语句
(5)跳回第2步,继续执行
4.执行外层循环的迭代语句
5.跳回第2步继续执行
注意:
在循环嵌套语句中,最外层的循环的初始化语句执行了1次
在循环嵌套语句中,最内层的循环的初始化语句执行了"外层循环的循环次数"次
在循环嵌套语句中,最内层的循环的循环体语句执行了"外层循环的循环次数 * 内层循环的循环次数"次