同学们好啊,我是沉默王二,一枚沉默但有趣又帅气的程序员(听,是不是一种二哥卖瓜的赶脚)。又到了《教妹学 Java》的时间,很开心,很期待,很舒适。这是《教妹学 Java》专栏的第 13 篇文章,我们来谈谈“Java 中的流程控制语句”。

创新互联科技有限公司专业互联网基础服务商,为您提供联通机房服务器托管,高防服务器,成都IDC机房托管,成都主机托管等互联网服务。
强调一下,《教妹学 Java》面向的是零基础的 Java 爱好者,我希望能帮助同学们轻松迈进编程世界的大门,为后续的深入学习打下坚实的基础。
“二哥,流程控制语句都有哪些呢?”三妹的脸上泛着甜甜的笑容,她开始对接下来要学习的内容充满期待了,这正是我感到欣慰的地方。
“比如说 if-else、switch、for、while、do-while、return、break、continue 等等,接下来,我们一个个来了解下。”
01、if-else 相关
1)if 语句
if 语句的格式如下:
- if(布尔表达式){
 - // 如果条件为 true,则执行这块代码
 - }
 
画个流程图表示一下:
来写个示例:
- public class IfExample {
 - public static void main(String[] args) {
 - int age = 20;
 - if (age < 30) {
 - System.out.println("青春年华");
 - }
 - }
 - }
 
输出:
- 青春年华
 
2)if-else 语句
if-else 语句的格式如下:
- if(布尔表达式){
 - // 条件为 true 时执行的代码块
 - }else{
 - // 条件为 false 时执行的代码块
 - }
 
画个流程图表示一下:
来写个示例:
- public class IfElseExample {
 - public static void main(String[] args) {
 - int age = 31;
 - if (age < 30) {
 - System.out.println("青春年华");
 - } else {
 - System.out.println("而立之年");
 - }
 - }
 - }
 
输出:
- 而立之年
 
除了这个例子之外,还有一个判断闰年(被 4 整除但不能被 100 整除或者被 400 整除)的例子:
- public class LeapYear {
 - public static void main(String[] args) {
 - int year = 2020;
 - if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
 - System.out.println("闰年");
 - } else {
 - System.out.println("普通年份");
 - }
 - }
 - }
 
输出:
- 闰年
 
如果执行语句比较简单的话,可以使用三元运算符来代替 if-else 语句,如果条件为 true,返回 ? 后面 : 前面的值;如果条件为 false,返回 : 后面的值。
- public class IfElseTernaryExample {
 - public static void main(String[] args) {
 - int num = 13;
 - String result = (num % 2 == 0) ? "偶数" : "奇数";
 - System.out.println(result);
 - }
 - }
 
输出:
- 奇数
 
3)if-else-if 语句
if-else-if 语句的格式如下:
- if(条件1){
 - // 条件1 为 true 时执行的代码
 - }else if(条件2){
 - // 条件2 为 true 时执行的代码
 - }
 - else if(条件3){
 - // 条件3 为 true 时执行的代码
 - }
 - ...
 - else{
 - // 以上条件均为 false 时执行的代码
 - }
 
画个流程图表示一下:
来写个示例:
- public class IfElseIfExample {
 - public static void main(String[] args) {
 - int age = 31;
 - if (age < 30) {
 - System.out.println("青春年华");
 - } else if (age >= 30 && age < 40 ) {
 - System.out.println("而立之年");
 - } else if (age >= 40 && age < 50 ) {
 - System.out.println("不惑之年");
 - } else {
 - System.out.println("知天命");
 - }
 - }
 - }
 
输出:
- 而立之年
 
4)if 嵌套语句
if 嵌套语句的格式如下:
- if(外侧条件){
 - // 外侧条件为 true 时执行的代码
 - if(内侧条件){
 - // 内侧条件为 true 时执行的代码
 - }
 - }
 
画个流程图表示一下:
来写个示例:
- public class NestedIfExample {
 - public static void main(String[] args) {
 - int age = 20;
 - boolean isGirl = true;
 - if (age >= 20) {
 - if (isGirl) {
 - System.out.println("女生法定结婚年龄");
 - }
 - }
 - }
 - }
 
输出:
- 女生法定结婚年龄
 
02、switch 语句
switch 语句用来判断变量与多个值之间的相等性。变量的类型可以是 byte、short、int、long,或者对应的包装器类型 Byte、Short、Integer、Long,以及字符串和枚举。
来看一下 switch 语句的格式:
- switch(变量) {
 - case 可选值1:
 - // 可选值1匹配后执行的代码;
 - break; // 该关键字是可选项
 - case 可选值2:
 - // 可选值2匹配后执行的代码;
 - break; // 该关键字是可选项
 - ......
 - default: // 该关键字是可选项
 - // 所有可选值都不匹配后执行的代码
 - }
 
画个流程图:
来个示例:
- public class Switch1 {
 - public static void main(String[] args) {
 - int age = 20;
 - switch (age) {
 - case 20 :
 - System.out.println("上学");
 - break;
 - case 24 :
 - System.out.println("苏州工作");
 - break;
 - case 30 :
 - System.out.println("洛阳工作");
 - break;
 - default:
 - System.out.println("未知");
 - break; // 可省略
 - }
 - }
 - }
 
输出:
- 上学
 
当两个值要执行的代码相同时,可以把要执行的代码写在下一个 case 语句中,而上一个 case 语句中什么也没有,来看一下示例:
- public class Switch2 {
 - public static void main(String[] args) {
 - String name = "沉默王二";
 - switch (name) {
 - case "詹姆斯":
 - System.out.println("篮球运动员");
 - break;
 - case "穆里尼奥":
 - System.out.println("足球教练");
 - break;
 - case "沉默王二":
 - case "沉默王三":
 - System.out.println("乒乓球爱好者");
 - break;
 - default:
 - throw new IllegalArgumentException(
 - "名字没有匹配项");
 - }
 - }
 - }
 
输出:
- 乒乓球爱好者
 
枚举作为 switch 语句的变量也很常见,来看例子:
- public class SwitchEnumDemo {
 - public enum PlayerTypes {
 - TENNIS,
 - FOOTBALL,
 - BASKETBALL,
 - UNKNOWN
 - }
 - public static void main(String[] args) {
 - System.out.println(createPlayer(PlayerTypes.BASKETBALL));
 - }
 - private static String createPlayer(PlayerTypes playerType) {
 - switch (playerType) {
 - case TENNIS:
 - return "网球运动员费德勒";
 - case FOOTBALL:
 - return "足球运动员C罗";
 - case BASKETBALL:
 - return "篮球运动员詹姆斯";
 - case UNKNOWN:
 - throw new IllegalArgumentException("未知");
 - default:
 - throw new IllegalArgumentException(
 - "运动员类型: " + playerType);
 - }
 - }
 - }
 
输出:
- 篮球运动员詹姆斯
 
03、for 循环
1)普通 for 循环
普通的 for 循环可以分为 4 个部分:
1)初始变量:循环开始执行时的初始条件。
2)条件:循环每次执行时要判断的条件,如果为 true,就执行循环体;如果为 false,就跳出循环。当然了,条件是可选的,如果没有条件,则会一直循环。
3)循环体:循环每次要执行的代码块,直到条件变为 false。
4)自增/自减:初识变量变化的方式。
来看一下普通 for 循环的格式:
- for(初识变量;条件;自增/自减){
 - // 循环体
 - }
 
画个流程图:
来个示例:
- public class ForExample {
 - public static void main(String[] args) {
 - for (int i = 0; i < 5; i++) {
 - System.out.println("沉默王三好美啊");
 - }
 - }
 - }
 
输出:
- 沉默王三好美啊
 - 沉默王三好美啊
 - 沉默王三好美啊
 - 沉默王三好美啊
 - 沉默王三好美啊
 
“哎呀,二哥,你真的是变着法夸我啊。”
“非也非也,三妹,你看不出我其实在夸我自己吗?循环语句还可以嵌套呢,这样就可以打印出更好玩的呢,你要不要看看?”
“好呀好呀!”
“看好了啊。”
- public class PyramidForExample {
 - public static void main(String[] args) {
 - for (int i = 0; i < 5; i++) {
 - for (int j = 0;j<= i;j++) {
 - System.out.print("");
 - }
 - System.out.println();
 - }
 - }
 - }
 
打印出什么玩意呢?
“哇,太不可思议了,二哥。”
“嘿嘿。”
2)for-each
for-each 循环通常用于遍历数组和集合,它的使用规则比普通的 for 循环还要简单,不需要初始变量,不需要条件,不需要下标来自增或者自减。来看一下语法:
- for(元素类型 元素 : 数组或集合){
 - // 要执行的代码
 - }
 
来看一下示例:
- public class ForEachExample {
 - public static void main(String[] args) {
 - String[] strs = {"沉默王二", "一枚有趣的程序员"};
 - for (String str : strs) {
 - System.out.println(str);
 - }
 - }
 - }
 
输出:
- 沉默王二
 - 一枚有趣的程序员
 
“呀,二哥,你开始王哥卖瓜了啊。”
“嘿嘿,三妹,你这样说哥会脸红的。”
3)无限 for 循环
“三妹,你想不想体验一下无限 for 循环的威力,也就是死循环。”
“二哥,那会有什么样的后果啊?”
“来,看看就知道了。”
- public class InfinitiveForExample {
 - public static void main(String[] args) {
 - for(;;){
 - System.out.println("停不下来。。。。");
 - }
 - }
 - }
 
输出:
- 停不下来。。。。
 - 停不下来。。。。
 - 停不下来。。。。
 - 停不下来。。。。
 
一旦运行起来,就停不下来了,除非强制停止。
04、while 循环
来看一下 while 循环的格式:
- while(条件){
 - //循环体
 - }
 
画个流程图:
来个示例:
- public class WhileExample {
 - public static void main(String[] args) {
 - int i = 0;
 - while (true) {
 - System.out.println("沉默王三");
 - i++;
 - if (i == 5) {
 - break;
 - }
 - }
 - }
 - }
 
“三妹,你猜猜会输出几次?”
“五次吗?”
“对了,你可真聪明。”
- 沉默王三
 - 沉默王三
 - 沉默王三
 - 沉默王三
 - 沉默王三
 
“三妹,你想不想体验一下无限 while 循环的威力,也就是死循环。”
“二哥,那会有什么样的后果啊?”
“来,看看就知道了。”
- public class InfinitiveWhileExample {
 - public static void main(String[] args) {
 - while (true) {
 - System.out.println("停不下来。。。。");
 - }
 - }
 - }
 
输出:
- 停不下来。。。。
 - 停不下来。。。。
 - 停不下来。。。。
 - 停不下来。。。。
 
把 while 的条件设置为 true,并且循环体中没有 break 关键字的话,程序一旦运行起来,就根本停不下来了,除非强制停止。
05、do-while 循环
来看一下 do-while 循环的格式:
- do{
 - // 循环体
 - }while(提交);
 
画个流程图:
来个示例:
- public class DoWhileExample {
 - public static void main(String[] args) {
 - int i = 0;
 - do {
 - System.out.println("沉默王三");
 - i++;
 - if (i == 5) {
 - break;
 - }
 - } while (true);
 - }
 - }
 
“三妹,你猜猜会输出几次?”
“五次吗?”
“对了,你可真聪明。”
- 沉默王三
 - 沉默王三
 - 沉默王三
 - 沉默王三
 - 沉默王三
 
“三妹,你想不想体验一下无限 do-while 循环的威力......”
“二哥,又来啊,我都腻了。”
“来吧,例行公事,就假装看看嘛。”
- public class InfinitiveDoWhileExample {
 - public static void main(String[] args) {
 - do {
 - System.out.println("停不下来。。。。");
 - } while (true);
 - }
 - }
 
输出:
- 停不下来。。。。
 - 停不下来。。。。
 - 停不下来。。。。
 - 停不下来。。。。
 
把 do-while 的条件设置为 true,并且循环体中没有 break 关键字的话,程序一旦运行起来,就根本停不下来了,除非强制停止。
06、break
break 关键字通常用于中断循环或 switch 语句,它在指定条件下中断程序的当前流程。如果是内部循环,则仅中断内部循环。
可以将 break 关键字用于所有类型循环语句中,比如说 for 循环、while 循环,以及 do-while 循环。
来画个流程图感受一下:
用在 for 循环中的示例:
- for (int i = 1; i <= 10; i++) {
 - if (i == 5) {
 - break;
 - }
 - System.out.println(i);
 - }
 
用在嵌套 for 循环中的示例:
- for (int i = 1; i <= 3; i++) {
 - for (int j = 1; j <= 3; j++) {
 - if (i == 2 && j == 2) {
 - break;
 - }
 - System.out.println(i + " " + j);
 - }
 - }
 
用在 while 循环中的示例:
- int i = 1;
 - while (i <= 10) {
 - if (i == 5) {
 - i++;
 - break;
 - }
 - System.out.println(i);
 - i++;
 - }
 
用在 do-while 循环中的示例:
- int j = 1;
 - do {
 - if (j == 5) {
 - j++;
 - break;
 - }
 - System.out.println(j);
 - j++;
 - } while (j <= 10);
 
用在 switch 语句中的示例:
- switch (age) {
 - case 20 :
 - System.out.println("上学");
 - break;
 - case 24 :
 - System.out.println("苏州工作");
 - break;
 - case 30 :
 - System.out.println("洛阳工作");
 - break;
 - default:
 - System.out.println("未知");
 - break; // 可省略
 - }
 
07、continue
当我们需要在 for 循环或者 (do)while 循环中立即跳转到下一个循环时,就可以使用 continue 关键字,通常用于跳过指定条件下的循环体,如果循环是嵌套的,仅跳过当前循环。
来个示例:
- public class ContinueDemo {
 - public static void main(String[] args) {
 - for (int i = 1; i <= 10; i++) {
 - if (i == 5) {
 - // 使用 continue 关键字
 - continue;// 5 将会被跳过
 - }
 - System.out.println(i);
 - }
 - }
 - }
 
输出:
- 1
 - 2
 - 3
 - 4
 - 6
 - 7
 - 8
 - 9
 - 10
 
“二哥,5 真的被跳过了呀。”
“那必须滴。不然就是 bug。”
再来个循环嵌套的例子。
- public class ContinueInnerDemo {
 - public static void main(String[] args) {
 - for (int i = 1; i <= 3; i++) {
 - for (int j = 1; j <= 3; j++) {
 - if (i == 2 && j == 2) {
 - // 当i=2,j=2时跳过
 - continue;
 - }
 - System.out.println(i + " " + j);
 - }
 - }
 - }
 - }
 
打印出什么玩意呢?
- 1 1
 - 1 2
 - 1 3
 - 2 1
 - 2 3
 - 3 1
 - 3 2
 - 3 3
 
“2 2” 没有输出,被跳过了。
再来看一下 while 循环时 continue 的使用示例:
- public class ContinueWhileDemo {
 - public static void main(String[] args) {
 - int i = 1;
 - while (i <= 10) {
 - if (i == 5) {
 - i++;
 - continue;
 - }
 - System.out.println(i);
 - i++;
 - }
 - }
 - }
 
输出:
- 1
 - 2
 - 3
 - 4
 - 6
 - 7
 - 8
 - 9
 - 10
 
注意:如果把 if 条件中的“i++”省略掉的话,程序就会进入死循环,一直在 continue。
最后,再来看一下 do-while 循环时 continue 的使用示例:
- public class ContinueDoWhileDemo {
 - public static void main(String[] args) {
 - int i=1;
 - do{
 - if(i==5){
 - i++;
 - continue;
 - }
 - System.out.println(i);
 - i++;
 - }while(i<=10);
 - }
 - }
 
输出:
- 1
 - 2
 - 3
 - 4
 - 6
 - 7
 - 8
 - 9
 - 10
 
注意:同样的,如果把 if 条件中的“i++”省略掉的话,程序就会进入死循环,一直在 continue。
“好了,三妹,关于 Java 中的流程控制语句就先说这么多吧。”转动了一下僵硬的脖子后,我对三妹说。
“二哥,你辛苦了,容我好好消化一下。”
本文转载自微信公众号「沉默王二」,可以通过以下二维码关注。转载本文请联系沉默王二公众号。
Copyright © 2009-2022 www.wtcwzsj.com 青羊区广皓图文设计工作室(个体工商户) 版权所有 蜀ICP备19037934号