日期:2011-03-22 16:17:00 来源:本站整理
<b>java的break和continue语句</b>[Java编程]
本文“<b>java的break和continue语句</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在任何循环语句的主体部份,亦可用break和continue掌握循环的流程.此中,break用于强行退出循环,不履行循环中剩余的语句.而continue则终止履行当前的反复,然撤退回循环起始和,开始新的反复.
下面这个程序向大家展示了break和continue在for和while循环中的例子:
//: BreakAndContinue.java // Demonstrates break and continue keywords public class BreakAndContinue { public static void main(String[] args) { for(int i = 0; i < 100; i++) { if(i == 74) break; // Out of for loop if(i % 9 != 0) continue; // Next iteration System.out.println(i); } int i = 0; // An "infinite loop": while(true) { i++; int j = i * 27; if(j == 1269) break; // Out of loop if(i % 10 != 0) continue; // Top of loop System.out.println(i); } } } ///:~
在这个for循环中,i的值永久不会到达100.因为一旦i到达74,break语句就会中止循环.普通,只有在不知道中止条件什么时刻满意时,才需象这样利用break.只要i不能被9整除,continue语句会使程序流程返回循环的最开首履行(所以使i值递增).假如可以整除,则将值显示出来.
第二部份向大家揭露了一个“无限循环”的情形.但是,循环内部有一个break语句,可中止循环.除此以外,大家还会看到continue移回循环顶部,同时不完成剩余的内容(所以只有在i值能被9整除时才打印出值).输出后果以下:
0 9 18 27 36 45 54 63 72 10 20 30 40
之所以显示0,是由于0%9等于0.
无限循环的第二种情势是for(;;).编译器将while(true)与for(;;)看做同一回事.所以具体选用哪个取决于自己的编程习惯.
1. 臭名昭著的“goto”
goto关键字很早就在程序计划语言中呈现.事实上,goto是汇编语言的程序掌握构造的始祖:“若条件A,则跳到这里;不然跳到那边”.若阅读由几近全部编译器生成的汇编代码,就会发现程序掌握里包含了很多跳转.但是,goto是在源码的级别跳转的,所以招致了不好的名誉.若程序老是从一个地方跳到另一个地方,还有什么办法能辨认代码的流程呢?随着Edsger Dijkstra闻名的“Goto有害”论的问世,goto便此后失宠.
事实上,真正的问题并不在于利用goto,而在于goto的滥用.并且在一些少见的情形下,goto是组织掌握流程的最佳手段.
固然goto还是Java的一个保存字,但并未在语言中得到正式利用;Java没有goto.但是,在break和continue这两个关键字的身上,我们仍旧能看出一些goto的影子.它并不属于一次跳转,而是中止循环语句的一种办法.之所以把它们归入goto问题中一同谈论,是由于它们利用了相同的机制:标签.
“标签”是背面跟一个冒号的标识符,就象下面这样:
label1:
对Java来说,唯一用到标签的地方是在循环语句之前.进一步说,它实际需求紧靠在循环语句的前方——在标签和循环之间置入任何语句都是不明智的.而在循环之前设置标签的唯一来由是:我们但愿在此中嵌套另一个循环大概一个开关.这是由于break和continue关键字普通只中止当前循环,但假如伴随标签利用,它们就会中止到存在标签的地方.以下所示:
label1:
外部循环{
内部循环{
//...
break; //1
//...
continue; //2
//...
continue label1; //3
//...
break label1; //4
}
}
在条件1中,break中止内部循环,并在外部循环完毕.在条件2中,continue移回内部循环的起始处.但在条件3中,continue label1却同时中止内部循环以及外部循环,并移至label1处.随后,它实际是持续循环,但却从外部循环开始.在条件4中,break label1也会中止全部循环,并回到label1处,但并不重新进入循环.也就是说,它实际是完好中止了两个循环.
下面是for循环的一个例子:
//: LabeledFor.java // Java’s "labeled for loop" public class LabeledFor { public static void main(String[] args) { int i = 0; outer: // Can't have statements here for(; true ;) { // infinite loop inner: // Can't have statements here for(; i < 10; i++) { prt("i = " + i); if(i == 2) { prt("continue"); continue; } if(i == 3) { prt("break"); i++; // Otherwise i never // gets incremented. break; } if(i == 7) { prt("continue outer"); i++; // Otherwise i never // gets incremented. continue outer; } if(i == 8) { prt("break outer"); break outer; } for(int k = 0; k < 5; k++) { if(k == 3) { prt("continue inner"); continue inner; } } } } // Can't break or continue // to labels here } static void prt(String s) { System.out.println(s); } } ///:~
这里用到了在其他例子中已经定义的prt()办法.
注意break会中止for循环,并且在到达for循环的末尾之前,递增表达式不会履行.由于break跳过了递增表达式,所以递增会在i==3的情形下直接履行.在i==7的情形下,continue outer语句也会到达循环顶部,并且也会跳过递增,所以它也是直接递增的.
下面是输出后果:
假如没有break outer语句,就没有办法在一个内部循环里找到出外部循环的途径.这是由于break本身只能中止最内层的循环(关于continue一样如此).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
当然,若想在中止循环的同时退出办法,简单地用一个return便可.
下面这个例子向大家展示了带标签的break以及continue语句在while循环中的用法:
一样的法则亦实用于while://: LabeledWhile.java // Java's "labeled while" loop public class LabeledWhile { public static void main(String[] args) { int i = 0; outer: while(true) { prt("Outer while loop"); while(true) { i++; prt("i = " + i); if(i == 1) { prt("continue"); continue; } if(i == 3) { prt("continue outer"); continue outer; } if(i == 5) { prt("break"); break; } if(i == 7) { prt("break outer"); break outer; } } } } static void prt(String s) { System.out.println(s); } } ///:~
(1) 简单的一个continue会退回最内层循环的开首(顶部),并持续履行.
(2) 带有标签的continue会到达标签的位置,并重新进入紧接在那个标签背面的循环.
(3) break会中止当前循环,并移离当前标签的末尾.
(4) 带标签的break会中止当前循环,并移离由那个标签指导的循环的末尾.
这个办法的输出后果是一目了然的:
大家要记着的重点是:在Java里唯一需求用到标签的地方就是拥有嵌套循环,并且想中止或持续多个嵌套级别的时刻.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
在Dijkstra的“Goto有害”论中,他最反对的就是标签,而非goto.随着标签在一个程序里数目的增添,他发现产生错误的机会也越来越多.标签和goto使我们难于对程序作静态解析.这是由于它们在程序的履行流程中引入了很多“怪圈”.但幸运的是,Java标签不会造成这方面的问题,因为它们的活动场所已被限死,不可通过分外的方法处处传送程序的掌握权.由此也引出了一个风趣的问题:通过限制语句的本领,反而能使一项语言特点越发有效.
以上是“<b>java的break和continue语句</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论