“二哥,流程控制语句都有哪些呢?”三妹的脸上泛着甜甜的笑容,她开始对接下来要学习的内容充满期待了,这正是我感到欣慰的地方。

“比如说 if-else、switch、for、while、do-while、return、break、continue 等等,接下来,我们一个个来了解下。”

01、if-else 相关1)if 语句if 语句的格式如下:

if(布尔表达式){

// 如果条件为 true,则执行这块代码

}画个流程图表示一下:

来写个示例:

int age = 20;

if (age < 30) {

System.out.println("青春年华");

}输出:

青春年华2)if-else 语句if-else 语句的格式如下:

if(布尔表达式){

// 条件为 true 时执行的代码块

}else{

// 条件为 false 时执行的代码块

}画个流程图表示一下:

来写个示例:

int age = 31;

if (age < 30) {

System.out.println("青春年华");

} else {

System.out.println("而立之年");

}输出:

而立之年除了这个例子之外,还有一个判断闰年(被 4 整除但不能被 100 整除或者被 400 整除)的例子:

int year = 2020;

if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {

System.out.println("闰年");

} else {

System.out.println("普通年份");

}输出:

闰年如果执行语句比较简单的话,可以使用三元运算符来代替 if-else 语句,如果条件为 true,返回 ? 后面 : 前面的值;如果条件为 false,返回 : 后面的值。

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 时执行的代码

}画个流程图表示一下:

来写个示例:

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 时执行的代码

}

}画个流程图表示一下:

来写个示例:

int age = 20;

boolean isGirl = true;

if (age >= 20) {

if (isGirl) {

System.out.println("女生法定结婚年龄");

}

}输出:

女生法定结婚年龄02、switch 语句switch 语句用来判断变量与多个值之间的相等性。变量的类型可以是:

byte、short、char、int:基本整数类型。String:字符串类型。枚举类型:自定义的枚举类型。包装类:如 Byte、Short、Character、Integer。来看一下 switch 语句的格式:

switch(变量) {

case 可选值1:

// 可选值1匹配后执行的代码;

break; // 该关键字是可选项

case 可选值2:

// 可选值2匹配后执行的代码;

break; // 该关键字是可选项

......

default: // 该关键字是可选项

// 所有可选值都不匹配后执行的代码

}变量可以有 1 个或者 N 个值。值类型必须和变量类型是一致的,并且值是确定的。值必须是唯一的,不能重复,否则编译会出错。break 关键字是可选的,如果没有,则执行下一个 case,如果有,则跳出 switch 语句。default 关键字也是可选的。画个流程图:

来个示例:

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 语句中什么也没有,来看一下示例:

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);

}

}

}输出:

篮球运动员詹姆斯但 switch 不支持 long、float、double 类型,这是因为:

long 是 64 位整数,不在 switch 一开始设计的范围内(32 位的 int 在大多数情况下就够用了)。float 和 double 是浮点数,浮点数的比较不如整数简单和直接,存在精度误差。03、for 循环1)普通 for 循环普通的 for 循环可以分为 4 个部分:

1)初始变量:循环开始执行时的初始条件。

2)条件:循环每次执行时要判断的条件,如果为 true,就执行循环体;如果为 false,就跳出循环。当然了,条件是可选的,如果没有条件,则会一直循环。

3)循环体:循环每次要执行的代码块,直到条件变为 false。

4)自增/自减:初始变量变化的方式。

来看一下普通 for 循环的格式:

for(初始变量;条件;自增/自减){

// 循环体

}画个流程图:

来个示例:

for (int i = 0; i < 5; i++) {

System.out.println("沉默王三好美啊");

}输出:

沉默王三好美啊

沉默王三好美啊

沉默王三好美啊

沉默王三好美啊

沉默王三好美啊“哎呀,二哥,你真的是变着法夸我啊。”

“非也非也,三妹,你看不出我其实在夸我自己吗?循环语句还可以嵌套呢,这样就可以打印出更好玩的呢,你要不要看看?”

“好呀好呀!”

“看好了啊。”

for (int i = 0; i < 5; i++) {

for (int j = 0;j<= i;j++) {

System.out.print("❤");

}

System.out.println();

}打印出什么玩意呢?

❤❤

❤❤❤

❤❤❤❤

❤❤❤❤❤“哇,太不可思议了,二哥。”

“嘿嘿。”

2)for-eachfor-each 循环通常用于遍历数组和集合,它的使用规则比普通的 for 循环还要简单,不需要初始变量,不需要条件,不需要下标来自增或者自减。来看一下语法:

for(元素类型 元素 : 数组或集合){

// 要执行的代码

}来看一下示例:

String[] strs = {"沉默王二", "一枚有趣的程序员"};

for (String str : strs) {

System.out.println(str);

}输出:

沉默王二

一枚有趣的程序员“呀,二哥,你开始王哥卖瓜了啊。”

“嘿嘿,三妹,你这样说哥会脸红的。”

3)无限 for 循环“三妹,你想不想体验一下无限 for 循环的威力,也就是死循环。”

“二哥,那会有什么样的后果啊?”

“来,看看就知道了。”

for(;;){

System.out.println("停不下来。。。。");

}输出:

停不下来。。。。

停不下来。。。。

停不下来。。。。

停不下来。。。。一旦运行起来,就停不下来了,除非强制停止。

04、while 循环来看一下 while 循环的格式:

while(条件){

//循环体

}画个流程图:

来个示例:

int i = 0;

while (true) {

System.out.println("沉默王三");

i++;

if (i == 5) {

break;

}

}“三妹,你猜猜会输出几次?”

“五次吗?”

“对了,你可真聪明。”

沉默王三

沉默王三

沉默王三

沉默王三

沉默王三“三妹,你想不想体验一下无限 while 循环的威力,也就是死循环。”

“二哥,那会有什么样的后果啊?”

“来,看看就知道了。”

while (true) {

System.out.println("停不下来。。。。");

}输出:

停不下来。。。。

停不下来。。。。

停不下来。。。。

停不下来。。。。把 while 的条件设置为 true,并且循环体中没有 break 关键字的话,程序一旦运行起来,就根本停不下来了,除非强制停止。

05、do-while 循环来看一下 do-while 循环的格式:

do{

// 循环体

}while(条件);画个流程图:

来个示例:

int i = 0;

do {

System.out.println("沉默王三");

i++;

if (i == 5) {

break;

}

} while (true);“三妹,你猜猜会输出几次?”

“五次吗?”

“对了,你可真聪明。”

沉默王三

沉默王三

沉默王三

沉默王三

沉默王三“三妹,你想不想体验一下无限 do-while 循环的威力......”

“二哥,又来啊,我都腻了。”

“来吧,例行公事,就假装看看嘛。”

do {

System.out.println("停不下来。。。。");

} while (true);输出:

停不下来。。。。

停不下来。。。。

停不下来。。。。

停不下来。。。。把 do-while 的条件设置为 true,并且循环体中没有 break 关键字的话,程序一旦运行起来,就根本停不下来了,除非强制停止。

06、breakbreak 关键字通常用于中断循环或 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 关键字,通常用于跳过指定条件下的循环体,如果循环是嵌套的,仅跳过当前循环。

来个示例:

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。”

再来个循环嵌套的例子。

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 的使用示例:

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 的使用示例:

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。

08、小结本文全面讲解了Java流程控制语句,包括if、switch、while、for等结构。通过学习本文,你将了解到Java流程控制语句的基本概念、语法结构和使用场景,帮助你在实际编程过程中更加灵活地运用各类控制结构。

GitHub 上标星 10000+ 的开源知识库《二哥的 Java 进阶之路》第一版 PDF 终于来了!包括Java基础语法、数组&字符串、OOP、集合框架、Java IO、异常处理、Java 新特性、网络编程、NIO、并发编程、JVM等等,共计 32 万余字,500+张手绘图,可以说是通俗易懂、风趣幽默……详情戳:太赞了,GitHub 上标星 10000+ 的 Java 教程

微信搜 沉默王二 或扫描下方二维码关注二哥的原创公众号沉默王二,回复 222 即可免费领取。