《Java 7程序设计入门经典》一3.14 像使用goto语句一样使用break语句

简介: 本节书摘来自华章出版社《Java 7程序设计入门经典》一书中的第3章,第3.14节,作者 (美)Herbert Schildt Dale Skrien,更多章节内容可以访问云栖社区“华章计算机”公众号查看

3.14 像使用goto语句一样使用break语句

除了用于switch语句和循环外,break语句也可以用提供像goto语句一样的用法。由于goto语句是一种改变程序流的非结构化方法,因此Java并没有goto语句。使用了很多goto语句的程序一般难以理解和维护。但是,有一些使用goto语句的地方是有用且合理的。例如,在退出一组嵌套很深的循环时就是这样。为了应对这种情况,Java定义了break语句的扩展形式。例如,通过使用这种形式的break语句,可以从多层代码块退出。这些代码块不必是循环或是switch的一部分。它们可以是任意的代码块。另外,还可以精确指定执行恢复的位置,因为break的这种形式使用了标签。break语句具有goto语句的优点,还避免了goto语句的一些问题。
这种有标签的break语句的一般形式如下:

break label;

这里,label是标签名,标识一句代码或一个代码块。当这种形式的break语句执行时,控制权从标记的语句或块中转移出。标记的语句或块必须包含break语句,但是它不一定是最近的语句或块。例如,这意味着,可以用有标签的break语句退出一系列嵌套代码块。但不能使用break语句将程序控制权转移到不含break语句的块中。
为了给语句和块起个名字,可以在其开始处加标签。标签(label)是后加冒号的任意有效Java标识符。一旦为语句和块加了标签,就可以将这个标签作为break语句的目标。这样做可以执行语句或块后的语句。例如,下面的程序有三个嵌套的循环。

image
image

程序的输出如下所示:
image

让我们仔细看看这个程序,以理解为什么生成这样的输出。当i为1时,第一个if语句成功,使break跳转到由标签one定义的代码块的末尾。这使得程序输出“After block one”。当i为2时,第二个if语句成功,使控制权转移到由标签two标注的块的末尾。这使程序顺序输出“After block two”和“After block one”。当i为3时,第三个if语句成功,控制权转移到标记为three的语句的末尾。这时,三条消息都显示。
再看一个例子。这个例子使用break语句从一系列嵌套的for循环中跳出。当内层运行的break语句执行时,程序控制权跳转到外层for循环定义的块的末尾,这个块标记为done。这使得三重循环的剩余部分不再执行。

程序输出如下所示:
image

在何处精确放置标签十分重要,特别是当涉及循环时。例如,考虑下面的程序:
image

image

程序输出如下所示:
image

在程序中,两个嵌套的循环只有一点不同。在第一个嵌套循环中,标签在外层for语句的前面。在这种情况下,当执行break语句时,将控制权转移到整个for块的末尾,跳过外层循环迭代的其他代码。在第二个嵌套循环中,标签在外层for语句的左花括号前。于是,当执行break stop2时,控制权转移到外层for语句块的末尾,而不是循环的末尾。这引起下一次迭代的发生。
注意,不能跳转到不是为包括break语句的语句或块定义的标签。例如,下面程序是无效的,不能编译。
image

因为标注为one的for循环不包括在第二个for循环中的break语句,所以不可能将控制权转移到那个标签。
image

相关文章
|
1月前
|
Java 测试技术 开发者
💡Java 零基础:彻底掌握 for 循环,打造高效程序设计
【10月更文挑战第15天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
112 63
|
30天前
|
算法 Java 测试技术
🧑‍💻Java零基础:Java 的循环退出语句 break
【10月更文挑战第16天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
47 6
|
4月前
|
Java
java中return,break以及continue的用法
java中return,break以及continue的用法
48 10
|
5月前
|
存储 小程序 前端开发
java毕设项目|宿舍管理系统小程序设计与实现
java毕设项目|宿舍管理系统小程序设计与实现
|
5月前
|
监控 Java API
Java 程序设计 第八章 线程
Java 程序设计 第八章 线程
|
5月前
|
Java 编译器 C语言
Java 程序设计 第2章 Java基本语法 笔记
Java 程序设计 第2章 Java基本语法 笔记
|
5月前
|
Java
Java 程序设计 第七章 文件管理与输入/输出 笔记
Java 程序设计 第七章 文件管理与输入/输出 笔记
|
5月前
|
Java Android开发
Java 程序设计 第6章 异常与断言 笔记
Java 程序设计 第6章 异常与断言 笔记
|
5月前
|
Java 编译器
Java 程序设计 第4章 继承 笔记
Java 程序设计 第4章 继承 笔记
|
5月前
|
安全 Java 数据安全/隐私保护
Java 程序设计 第3章 类与对象 笔记
Java 程序设计 第3章 类与对象 笔记
下一篇
无影云桌面