热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javaforreturn_java循环控制中break、continue、return的区别

1使用break语句在Java中,break语句有3种作用。第一,你已经看到,在switch语句中,它被用来终止一个语句序列

1 使用break 语句在Java 中,break语句有3种作用。

第一,你已经看到,在switch语句中,它被用来终止一个语句序列。

第二,它能被用来退出一个循环。

第三,它能作为一种“先进”goto 语句来使用。

下面对最后 2种用法进行解释。

使用break 退出循环 可以使用break 语句直接强行退出循环,忽略循环体中任何其他语句和循环条件测试。在循环中遇到break语句时,循环被终止,程序控制在循环后面语句重新开始。

下面是一个简单例子:

// Using break to exit a loop.

class BreakLoop {

public static void main(String args[]) {

for(int i&#61;0; i<100; i&#43;&#43;) {

if(i &#61;&#61; 10) break; // terminate loop if i is 10

System.out.println("i: " &#43; i);

}

System.out.println("Loop complete.");

}

}

该程序产生如下输出&#xff1a;

i: 0 i: 1 i: 2 i: 3 i: 4 i: 5 i: 6 i: 7 i: 8 i: 9 Loop complete.

正如你看到那样&#xff0c;尽管for 循环被设计为从 0执行到99&#xff0c;但是当i等于10时&#xff0c;break语句终止程序。break语句能用于任何 Java 循环中&#xff0c;包括人们有意设置无限循环。例如&#xff0c;将上一个程序用while 循环改写如下。该程序输出和刚才看到输出一样。

// Using break to exit a while loop.

class BreakLoop2 {

public static void main(String args[]) {

int i &#61; 0; while(i <100) {

if(i &#61;&#61; 10)

break; // terminate loop if i is 10

System.out.println("i: " &#43; i);

i&#43;&#43;;

}

System.out.println("Loop complete.");

}

}

在一系列嵌套循环中使用break 语句时&#xff0c;它将仅仅终止最里面循环。

例如&#xff1a;

// Using break with nested loops.

class BreakLoop3 {

public static void main(String args[]) {

for(int i&#61;0; i<3; i&#43;&#43;) {

System.out.print("Pass " &#43; i &#43; ": ");

for(int j&#61;0; j<100; j&#43;&#43;) {

if(j &#61;&#61; 10) break; // terminate loop if j is 10

System.out.print(j &#43; " ");

}

System.out.println();

}

System.out.println("Loops complete.");

}

}

该程序产生如下输出&#xff1a;

Pass 0: 0 1 2 3 4 5 6 7 8 9 Pass 1: 0 1 2 3 4 5 6 7 8 9 Pass 2: 0 1 2 3 4 5 6 7 8 9 Loops complete.

从中可以看出&#xff0c;在内部循环中break语句仅仅终止该循环&#xff0c;外部循环不受影响。

break &#xff0c;在这里要记住两点。首先&#xff0c;一个循环中可以有一个以上break 语句。但要小心&#xff0c;太多break 语句会破坏你代码结构。其次&#xff0c;switch语句中break仅仅影响该switch 语句&#xff0c;而不会影响其中任何循环。

注意&#xff1a;break 不是被设计来提供一种正常循环终止方法。循环条件语句是专门用来终止循环。只有在某类特殊情况下&#xff0c;才用break 语句来取消一个循环。

把break 当作goto 一种形式来用 break语句除在switch语句和循环中使用之外&#xff0c;它还能作为goto 语句一种“文明”形式来使用。Java 中没有 goto 语句&#xff0c;因为goto 语句提供一种改变程序运行流程非结构化方式。这通常使程序难以理解和难于维护。它也阻止某些编译器优化。但是&#xff0c;有些地方goto 语句对于构造流程控制是有用而且是合法。

例如&#xff0c;从嵌套很深循环中退出时&#xff0c; goto 语句就很有帮助。因此&#xff0c;Java 定义break 语句一种扩展形式来处理这种情况。通过使用这种形式break&#xff0c;你可以终止一个或者几个代码块。这些代码块不必是一个循环或一个switch语句一部分&#xff0c;它们可以是任何块。而且&#xff0c;由于这种形式break 语句带有标签&#xff0c;你可以明确指定执行从何处重新开始。你将看到&#xff0c;break带给你是goto 益处&#xff0c;并舍弃goto 语句带来麻烦。

标签break 语句通用格式如下所示&#xff1a; break label; 这里&#xff0c;标签label 是标识代码块标签。当这种形式break执行时&#xff0c;控制被传递出指定代码块。被加标签代码块必须包围break 语句&#xff0c;但是它不需要是直接包围break块。这意味着你可以使用一个加标签break 语句退出一系列嵌套块。但是你不能使用break 语句将控制传递到不包含break 语句代码块。 要指定一个代码块&#xff0c;在其开头加一个标签即可。标签(label )可以是任何合法有效Java 标识符后跟一个冒号。一旦你给一个块加上标签后&#xff0c;你就可以使用这个标签作为break 语句对象。这样做会使执行在加标签块结尾重新开始。

例如&#xff0c;下面程序示例 3 个嵌套块&#xff0c;每一个都有它自己标签。

break语句使执行向前跳&#xff0c;调过定义为标签second 代码块结尾&#xff0c;跳过2个println ( ) 语句。

// Using break as a civilized form of goto.

class Break {

public static void main(String args[]) {

boolean t &#61; true;

first: {

second: {

third: {

System.out.println("Before the break.");

if(t) break second; // break out of second block

System.out.println("This won&#39;t execute");

}

System.out.println("This won&#39;t execute");

}

System.out.println("This is after second block.");

}

}

}

运行该程序&#xff0c;产生如下输出&#xff1a; Before the break. This is after second block. 标签break 语句一个最普遍用法是退出循环嵌套。例如&#xff0c;下面程序中&#xff0c;外层循环只执行一次&#xff1a;

// Using break to exit from nested loops

class BreakLoop4 {

public static void main(String args[]) {

outer: for(int i&#61;0; i<3; i&#43;&#43;) {

System.out.print("Pass " &#43; i &#43; ": ");

for(int j&#61;0; j<100; j&#43;&#43;) {

if(j &#61;&#61; 10) break outer; // exit both loops

System.out.print(j &#43; " ");

}

System.out.println("This will not print");

}

System.out.println("Loops complete.");

}

}

该程序产生如下输出&#xff1a; Pass 0: 0 1 2 3 4 5 6 7 8 9 Loops complete. 你可以看到&#xff0c;当内部循环退到外部循环时&#xff0c;两个循环都被终止。记住如果一个标签不在包围break块中定义&#xff0c;你就不能break 到该标签。

例如&#xff0c;下面程序就是非法&#xff0c;且不会被编译&#xff1a;

// This program contains an error.

class BreakErr {

public static void main(String args[]) {

one: for(int i&#61;0; i<3; i&#43;&#43;) {

System.out.print("Pass " &#43; i &#43; ": ");

}

for(int j&#61;0; j<100; j&#43;&#43;) {

if(j &#61;&#61; 10) break one; // WRONG

System.out.print(j &#43; " ");

}

}

}

因为标签为one循环没有包围break 语句&#xff0c;所以不能将控制传递到该块。

2 使用continue 语句有时强迫一个循环提早反复是有用。

也就是&#xff0c;你可能想要继续运行循环&#xff0c;但是要忽略这次重复剩余循环体语句。实际上&#xff0c;goto 只不过是跳过循环体&#xff0c;到达循环尾部。continue 语句是break语句补充。在while 和do while 循环中&#xff0c;continue 语句使控制直接转移给控制循环条件表达式&#xff0c;然后继续循环过程。在for 循环中&#xff0c;循环反复表达式被求值&#xff0c;然后执行条件表达式&#xff0c;循环继续执行。对于这3种循环&#xff0c;任何中间代码将被旁路。

下例使用continue 语句&#xff0c;使每行打印2个数字&#xff1a;

// Demonstrate continue.

class Continue {

public static void main(String args[]) {

for(int i&#61;0; i<10; i&#43;&#43;) {

System.out.print(i &#43; " ");

if (i%2 &#61;&#61; 0)

continue;

System.out.println("");

}

}

}

该程序使用%(模)运算符来检验变量i是否为偶数&#xff0c;如果是&#xff0c;循环继续执行而不输出一个新行。

该程序结果如下&#xff1a; 0 1 2 3 4 5 6 7 8 9 对于break语句&#xff0c;continue 可以指定一个标签来说明继续哪个包围循环。下面例子运用continue 语句来打印0到9三角形乘法表&#xff1a;

// Using continue with a label.

class ContinueLabel {

public static void main(String args[]) {

outer: for (int i&#61;0; i<10; i&#43;&#43;) {

for(int j&#61;0; j<10; j&#43;&#43;) {

if(j > i) {

System.out.println();

continue outer;

}

System.out.print(" " &#43; (i * j));

}

} System.out.println();

}

}

在本例中continue 语句终止计数j循环而继续计数i下一次循环反复。该程序输出如下&#xff1a; 0 0 1 0 2 4 0 3 6 9 0 4 8 12 16 0 5 10 15 20 25 0 6 12 18 24 30 36 0 7 14 21 28 35 42 49 0 8 16 24 32 40 48 56 64 0 9 18 27 36 45 54 63 72 81 很好利用continue 语句情况很少&#xff0c;一个原因是Java 提供一系列丰富循环语句&#xff0c;可以适用于绝大多数应用程序。但是&#xff0c;对于那些需要提早反复特殊情形&#xff0c;continue 语句提供一个结构化方法来实现。

3 使用return语句最后一个控制语句是return。

return语句用来明确地从一个方法返回。也就是&#xff0c;return 语句使程序控制返回到调用它方法。因此&#xff0c;将它分类为跳转语句。尽管对return 语句详细讨论在第 7 章开始&#xff0c;这里对其作简要地介绍。 在一个方法任何时间&#xff0c;return 语句可被用来使正在执行分支程序返回到调用它方法。下面例子说明这一点。下例中&#xff0c;由于是Java 运行系统调用main() &#xff0c;因此&#xff0c;return语句使程序执行返回到Java 运行系统。

// Demonstrate return.

class Return {

public static void main(String args[]) {

boolean t &#61; true;

System.out.println("Before the return.");

if(t) return; // return to caller

System.out.println("This won&#39;t execute.");

}

}

该程序结果如下&#xff1a; Before the return. 正如你看到一样&#xff0c;最后println( ) 语句没有被执行。一旦return语句被执行&#xff0c;程序控制传递到它调用者。 最后一点&#xff1a;在上面程序中&#xff0c;if(t)语句是必要。没有它&#xff0c;Java 编译器将标记“执行不到代码”(unreachable code )错误&#xff0c;因为编译器知道最后println ()语句将永远不会被执行。为阻止这个错误&#xff0c;为这个例子能够执行&#xff0c;在这里使用if语句来“蒙骗”编译器。



推荐阅读
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • des算法php,Des算法属于加密技术中的
    本文目录一览:1、des是什么算法2、80分求 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 引号快捷键_首选项和设置——自定义快捷键
    3.3自定义快捷键(CustomizingHotkeys)ChemDraw快捷键由一个XML文件定义,我们可以根据自己的需要, ... [详细]
  • vb.net不用多线程如何同时运行两个过程?不用多线程?即使用多线程,也不会是“同时”执行,题主只要略懂一些计算机编译原理就能明白了。不用多线程更不可能让两个过程同步执行了。不过可 ... [详细]
  • MVC中的自定义控件
    怎么样创建自定义控 ... [详细]
author-avatar
loloyoyo555
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有