Loading... # 顺序结构 # 选择结构 - 选择结构:根据条件来选择性地执行某段代码 ## if 语句 - 语法结构 ```java if (boolean 表达式 或 boolean 变量) { 条件执行体 // 为 true 时执行 } ``` - 执行流程 [ ![if语句](https://static.sitestack.cn/projects/sdky-java-note/d40c2ac323898af12b283d9089e9b4e3.png) ](https://sdky.gitee.io/img/if语句.png) 图 1 if语句 - if (boolean 表达式) 后没有 `;` ## if-else 语句 - 语法结构 - else 的隐含条件是对前面条件取反 ``` if (boolean 表达式 或 boolean 变量) { 条件执行体 1 // 为 true 时执行 } else { 条件执行体 2 // 为 false 时执行 } ``` - 执行流程 [ ![if-else语句](https://static.sitestack.cn/projects/sdky-java-note/3ce30cf6c955455717ca6bab8688d996.png) ](https://sdky.gitee.io/img/if-else语句.png) 图 2 if-else语句 - if-else 语句和三元运算符:从语义上二者的含义相同;从本质上说,if-else 是语句结构,三元运算符是一种运算符号,三元运算符运算结束后会**得到一个结果**,而 if-else,不能返回什么结果,只能控制**语句**的执行流程。 - 不能直接使用 else 语句. ## if-else if-else 语句 - 语法结构 ``` if (boolean 表达式 A) { 条件执行体 1 // A为 true 时执行 } else if (boolean 表达式 B) { 条件执行体 2 // B为 true 时执行 } else { 条件执行体 3 // 为 false 时执行 } ``` - 执行流程 [ ![if-elseif-else语句](https://static.sitestack.cn/projects/sdky-java-note/f817da7014998a78210b241979321060.png) ](https://sdky.gitee.io/img/if-elseif-else语句.png) 图 3 if-elseif-else语句 - 不能单独使用 else if - 可以不需要 else,至少一个 else if ## switch 语句 - 语法结构 ``` switch (整型表达式) { case 值 1: 执行语句 1; break; // 注意是否要写 break case 值 2: 执行语句 2; break; ... case 值 n: 执行语句 n; break; default: 以上值都不匹配时执行的语句; // 不用写 break } ``` - 执行流程 [ ![if-elseif-else语句](https://static.sitestack.cn/projects/sdky-java-note/f817da7014998a78210b241979321060.png) ](https://sdky.gitee.io/img/if-elseif-else语句.png) 图 4 if-elseif-else语句 - switch 语句适用于对多个**整型值**进行**匹配判断**,从而实现条件的分支控制,即“整型表达式 == int类型的值” - switch 语句后的表达式的数据类型只能是 byte、short、char、int 四种整数类型,枚举类型和 String 类型(从 Java 7 才允许),不能是 boolean 类型 - switch 语句支持的基本数据类型只有四种:`byte`、`short`、`char`、`int`,**不支持** long 类型,本质:switch 仅仅只能支持 int 类型(byte、short、char 会自动提升为 int 类型) - switch 执行的时会把入口 case **之后的 case** 统统忽略,会一直往下执行,直到遇到 `break` 或 `return` (**穿透**) - `default` 一般放在 switch 的最后,也不需要写 break ## 总结 - if 语句:针对单个条件判断 - if-else 语句:针对两个相斥条件判断 - if-else if-else 语句:针对多个相斥条件判断(`范围`) - switch 语句:针对多个相斥条件判断(`整型值`) # 循环结构 - 循环结构:根据循环条件重复执行某段代码 - **定义对象、变量**、**获取数据库连接**等操作尽量移至循环体外处理 ## while 循环 - 语法结构 ``` while (boolean 表达式) { 循环体; 迭代语句; // 自增或自减,用于对循环次数的控制 } ``` - 执行流程 [ ![while循环](https://static.sitestack.cn/projects/sdky-java-note/1942a46273cc4012db13b032ed3b589e.png) ](https://sdky.gitee.io/img/while循环.png) 图 5 while循环 - while 循环特点:先判断表达式,若为 true 就执行循环体,否则,跳过循环体 - while 循环 和 do-while 循环 的循环体至少有 1 条语句用于对循环次数的控制(死循环除外) ## do-while 循环 - 语法结构 ``` do { 循环体; 迭代语句; // 自增或自减,用于对循环次数的控制 } while (boolean 表达式); ``` - 执行流程 [ ![do-while循环](https://static.sitestack.cn/projects/sdky-java-note/5b8dc6c73aece7c00be2100de4843683.png) ](https://sdky.gitee.io/img/do-while循环.png) 图 6 do-while循环 - do while 循环特点:先执行一次循环体,再判断表达式,若为 true 就执行循环体,否则,跳过循环体 - while 循环 和 do-while 循环 的循环体至少有 1 条语句用于对循环次数的控制(死循环除外) ## for 循环 - 语法结构 ``` for (初始化语句; boolean 表达式; 迭代语句) { 循环体; } ``` - 执行流程 [ ![for循环](https://static.sitestack.cn/projects/sdky-java-note/5e65474946e2c9a0a9f4d1ca6a6ad416.png) ](https://sdky.gitee.io/img/for循环.png) 图 7 for循环 ## 死循环 ``` while (true) { } do { } while (true) for ( ; ; ) { } ``` ## 循环选择 - 事先不知道循环次数,使用 while 循环或 do-while 循环,至少执行一次使用 do-while 循环 - 事先**知道循环次数**,优先使用 for 循环 - 死循环,推荐使用 while 循环 ## 嵌套循环 - 重复的操作(内层循环) 需要做 N 次(外层循环) - 确定:循环的是什么,要循环的次数 - 嵌套 for 循环性能优化: - 将循环变量的声明放在循环外 - 将循环次数少的作为外层循环 ## 循环控制 - `break`:**结束**当前 break 所在的整个循环 - `continue`:**跳过** continue 所在的**本次循环**剩下语句,开始下一次循环 - `return`:**结束** return 所在的方法 - 控制 外层循环 - 在外层循环开始前使用**标签**标识一个外层循环,如 outer: - 在 break 或 continue 后紧跟标签名,如 break outer; 或 continue outer; - 三者相同点:在其后不能写语句(这个语句与其在同一个花括号中),否则编译报错 最后修改:2022 年 07 月 30 日 © 允许规范转载 打赏 赞赏作者 赞 如果觉得我的文章对你有用,请随意赞赏