程序流程控制就是控制程序的走向,往哪里执行。
一、变量作用域
讲流程控制前,需要先了解下方法中变量的作用域。从前面的章节中可知,方法内定义的变量方法外不能访问。再看下面的例子可知,变量的作用域仅限代码块中。代码块即指一对花括号 {} 括起来的代码。
![4708d0b3b930173e2854b5aaaa37fe50.png](https://i-blog.csdnimg.cn/blog_migrate/5195c03036fbd3a08be6086915e0131b.jpeg)
二、条件分支 if ... else if ... else
1. 单独使用 if,if 条件为真则执行 if 块中的语句。
![beac996e99c7703e4c48b5c0f4bf1e15.png](https://i-blog.csdnimg.cn/blog_migrate/25b1aa02264228b06720a47a4ecd24a4.jpeg)
2. if ... else 同时使用,if 条件为真执行 if 块中的语句,为假执行 else 块中的语句。
![1e0686e320bd058bab268883a584fb3a.png](https://i-blog.csdnimg.cn/blog_migrate/8c3f35daab4b9555e39d7159aceea39f.jpeg)
3. if ... else if ... else 多个条件同时使用,先判断 if 是否为真,若为真则执行完 if 块中的语句后跳出;若为假则往下判断 else if 的条件是否为真,为真则执行该条件块中的语句,执行完跳出;依次类推直到执行完 else。
![34c4a1b955c9cd7b9dec72e8ecc9d74a.png](https://i-blog.csdnimg.cn/blog_migrate/994c4cb1a9369f71a6de4fac16afef5d.jpeg)
三、循环
1. while 循环,当 while 条件为真时执行 while 块中的语句。
![cb1780b79fa4bfe5f877efb9dc4ec370.png](https://i-blog.csdnimg.cn/blog_migrate/c777a5d4fa072447c028a0dbc49d9230.jpeg)
2. do/while 循环,先执行 do 代码块的语句,再判断 while 的条件是否为真,若为真继续执行 do 代码块中的语句,为假则跳出。
![4a4e3a8d1297f68cb39cb2a4a1404ace.png](https://i-blog.csdnimg.cn/blog_migrate/ea53dc924156f66f63e0de70556c29b1.jpeg)
3. for 循环,for 循环其实时 while 循环的简化版
以下是三种 for 循环的用法。
![b4649664368054af924ace978d1a4775.png](https://i-blog.csdnimg.cn/blog_migrate/e0c8d7088295515f214f52b4323be0d8.jpeg)
四、switch 多重选着
处理多个 if ... else if ... else 时换成 switch 是一种更好的选择。switch 陪着 case 使用,如:
![9b0a333b6481d85b0a4c6fe2d81d2425.png](https://i-blog.csdnimg.cn/blog_migrate/388e5b16aeaf0bdde78e22b85d5bcc6c.jpeg)
结果输出:
![de8362583f6272b197e65c32d0b1a89a.png](https://i-blog.csdnimg.cn/blog_migrate/ad24ed5e222b3d94546b67be6f9ad362.jpeg)
switch 语句将从与选项值相匹配的 case 标签处开始执行直到遇到 break 语句,或者执行到 switch 语句的结束处为止。如果没有相匹配的 case 标签, 而有 default 子句, 就执行这个子句。值得注意的时 case 分支末尾没有 break 时会接着往下一个 case 或 default 执行,这样会导致触发多个分支。
五、中断控制流程
从上面的例子可知,中断控制流程的语句主要又 3 种:
break:退出循环,执行循环体后面的代码。
continue:跳出当前循环,执行下一个循环。
return:跳出当前函数,返回值给该方法的调用方。
Java 中没有 goto 语句,但是有类似 goto 用法的带标签的 break 语句,不建议使用,不用了解。意思是跳出当前语句块,执行标签定义的语句块下面的代码。标签必须紧挨着语句块,如:
![8e2aafa6623dd61979ddca281525238e.png](https://i-blog.csdnimg.cn/blog_migrate/03caef2cc62c22a6c9d87424a14d0b5a.jpeg)