重温经典《Thinking in java》第四版之第四章 控制执行流程(二十四)

简介: 重温经典《Thinking in java》第四版之第四章 控制执行流程(二十四)

在学习c语言编程的时候,接触过goto关键字,用于控制跳转到程序的哪一个地方继续执行,其实goto最早起源于汇编语言。Java中没有goto,然后Java中通过break和continue也能实现类似的跳转,这与break和continue两个关键字有关。它们其实不是跳转,而是中断迭代语的一种方法,他们实现的机制跟goto的实现机制类似,都是通过标签。形式如下:label1:

outer-iteration { 
inner-iteration { 
//... break; // (1) //... continue; // (2) //... continuelabel1; // (3) //... breaklabel1; // (4)     } 
}

(1) 中,break终端内部迭代,回到外部迭代。

(2) 中,continue使执行点回到内部迭代的下一次迭代执行中。

(3) 中,continue label1同时中断内部迭代和外部迭代,直接转到label1处,随后他从外部迭代开始继续执行。

(4) 中,break label1也会中断所有迭代,并回到label1处,但并不重新进入迭代,它实际中断了两个迭代。

下面通过for循环的例子来领悟一下标签的使用:

importstaticnet.mindview.util.Print.*; 
publicclassLabeledFor { 
publicstaticvoidmain(String[] args) { 
inti=0; 
outer: // Can’t have statements here for(; true ;) { // infinite loop inner: // Can’t have statements here for(; i<10; i++) { 
print("i = "+i); 
if(i==2) { 
print("continue"); 
continue; 
                    } 
if(i==3) { 
print("break"); 
i++; // Otherwise i never // gets incremented. break; 
                    } 
if(i==7) { 
print("continue outer"); 
i++; // Otherwise i never // gets incremented. continueouter; 
                    } 
if(i==8) { 
print("break outer"); 
breakouter; 
                    } 
for(intk=0; k<5; k++) { 
if(k==3) { 
print("continue inner"); 
continueinner; 
                        } 
                    } 
                } 
            } 
// Can’t break or continue to labels here     } 
}

/* Output:

i = 0

continue inner

i = 1

continue inner

i = 2

continue

i = 3

break

i = 4

continue inner

i = 5

continue inner

i = 6

continue inner

i = 7

continue outer

i = 8

break outer

*///:~

注意,break会中断for循环,而且在抵达for循环的末尾之前,递增表达式不会执行。由于break跳过了递增表达式,所以在i==3的情况下直接对i执行递增运算。在i==7的情况下,continue outer语句会跳转到循环顶部,而且也会跳过递增。如果没有break outer循环语句不会从内部循环跳转到外部循环。当然如果想直接终端循环,通过一个return即可。下面展示一个while循环使用标签的例子:

importstaticnet.mindview.util.Print.*; 
publicclassLabeledWhile { 
publicstaticvoidmain(String[] args) { 
inti=0; 
outer: 
while(true) { 
print("Outer while loop"); 
while(true) { 
i++; 
print("i = "+i); 
if(i==1) { 
print("continue"); 
continue; 
            } 
if(i==3) { 
print("continue outer"); 
continueouter; 
            } 
if(i==5) { 
print("break"); 
break; 
            } 
if(i==7) { 
print("break outer"); 
breakouter; 
            } 
          } 
        } 
    } 
}

/* Output:

Outer while loop

i = 1

continue

i = 2

i = 3

continue outer

Outer while loop

i = 4

i = 5

break

Outer while loop

i = 6

i = 7

break outer

*///:~

同样的规则亦适用于while循环:

1、一般的continue会退出最内层循环的开头,并继续执行。

2、带标签的continue会到达标签的位置,并重新进入紧接在那个标签后面的循环。

3、一般的break会中断并跳出当前循环。

4、带标签的break会中断并跳出标签所指的循环。

要记住的重点是:在Java里需要使用标签的唯一理由就是因为有循环嵌套,而且想从多层循环中break和continue到指定位置。

可以看到,使用标签会使程序变得复杂,降低可读性,现在很少使用;但是使用标签可以提高程序的灵活度。建议慎用。

目录
相关文章
|
1月前
|
运维 安全 Java
Java云HIS系统门诊流程
门诊系统主要实现医院门诊业务管理。是管理从门诊挂号、就诊到医生书写门诊病历、开立处方、门诊处置及门诊历史病历调阅、就诊信息查询;管理门诊收费挂号人员进行挂号、门诊收费、退费、结账、交款的整个门诊业务处理流程
33 0
|
Java 数据安全/隐私保护
java实现加密电话号码,有具体的加密流程注释
java实现加密电话号码,有具体的加密流程注释
24 0
|
3月前
|
JavaScript Java 项目管理
基于Java的大学生创新创业项目管理系统设计与实现(亮点:完整严谨的创新创业申请流程、适用于任何要求严格的审批类毕业设计)
基于Java的大学生创新创业项目管理系统设计与实现(亮点:完整严谨的创新创业申请流程、适用于任何要求严格的审批类毕业设计)
103 0
|
1月前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
23 2
|
4天前
|
Java
Java基础知识整理,驼峰规则、流程控制、自增自减
在这一篇文章中我们总结了包括注释、关键字、运算符的Java基础知识点,今天继续来聊一聊命名规则(驼峰)、流程控制、自增自减。
34 3
|
2月前
|
Java 持续交付 虚拟化
深入浅出:使用Docker容器化改善Java应用的开发与部署流程
在快速迭代与持续集成的软件开发周期中,确保应用在各种环境中一致运行是一个挑战。本文介绍了如何利用Docker容器技术,来容器化Java应用,以实现环境一致性、简化配置和加速部署过程。我们将从Docker的基础知识开始,探讨其与传统虚拟机的区别,进而深入到如何创建Dockerfile,构建镜像,以及运行和管理容器。此外,文章还将涵盖使用Docker Compose来管理多容器应用的策略,以及如何利用容器化改善CI/CD流程。通过本文,读者将获得关于如何高效地利用Docker改善Java应用开发与部署流程的实践指导。
161 1
|
2月前
|
Java
Java流程控制
Java流程控制
33 0
|
3月前
|
JavaScript 小程序 Java
基于Java的大学生汉服租赁网站的设计与实现(亮点:在线支付、ECharts图表展示、完整下单流程、视频点播、点赞评论互动)
基于Java的大学生汉服租赁网站的设计与实现(亮点:在线支付、ECharts图表展示、完整下单流程、视频点播、点赞评论互动)
39 0
|
3月前
|
JavaScript 小程序 Java
基于Java的大学生在线租房平台的设计与实现(亮点:合理的租房流程、房屋报修、多角色、在线评论回复)
基于Java的大学生在线租房平台的设计与实现(亮点:合理的租房流程、房屋报修、多角色、在线评论回复)
55 0
|
3月前
|
JavaScript 小程序 Java
基于Java的大学生选修选课系统设计与实现(亮点:多角色、贴近现实的选课流程、好看的系统外观)
基于Java的大学生选修选课系统设计与实现(亮点:多角色、贴近现实的选课流程、好看的系统外观)
73 0