程序流程控制
程序中最经典的三种执行顺序
顺序结构
- 自上而下的执行代码
分支结构
- 根据条件,选择对应代码执行 (if、switch)
循环结构
- 空值某段代码重复执行 (for、while、do-while)
分支结构
if分支
- 根据条件的真或假来决定是否执行某段代码
if分支有三种形式:
- 形式一在满足条件表达式时,就进入代码部分进行执行;
- 形式二在满足条件表达式时进入代码1部分,不满足条件表达式则进入代码2部分;
- 形式三在满足条件表达式1时进入代码1部分,不满足条件表达式1而满足条件表达式2则进入代码2部分,以此类推,直到最后不满足所有的条件表达式就进入代码n部分。
switch分支
- 是通过比较值来决定执行哪条分支。
switch分支的执行流程:
- 先执行表达式的值,再拿着这个值去与case后的值进行匹配。
- 与哪个case后的值匹配为true就执行哪个case块的代码,遇到break就跳出switch分支。
- 如果全部case后的值与之匹配都是false,则执行default块的代码。
if、switch的比较,以及各自适合什么业务场景?
- if在功能上远远强大于switch。
- 当前条件是区间的时候,应该使用if分支结构。
- 当条件是与一个一个的值比较的时候,Switch分支更合适:格式良好,性能较好,代码优雅。
使用switch分支的注意事项
- 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long。 (浮点型在计算机运算中可能出现精度丢失)
- case给出的值不允许重复,且只能是字面量,不能是变量。
- 正常使用switch的时候,不要忘记写break,否则会出现穿透现象。 (穿透现象即继续运行下一个case条件,从而造成执行了两个或两个以上case条件的结果)
switch穿透性在一些情况下可以简化代码
存在多个case分支的代码相同时,可以把相同的代码放到一个case块中,其他的case块都通过穿透性穿透到该case块执行代码即可,这样可以简化代码。
public class SwitchTest { public static void main(String args[]) { String week = "周三"; switch(week) { case"周一": case"周二": case"周三": case"周四": System.out.println("上课"); case"周五": case"周六": System.out.println("复习"); case"周日" System.out.println("休息"); default: System.out.println("信息错误"); } } }
END