经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Java的“Goto”与标签
来源:cnblogs  作者:凉初  时间:2018/11/1 9:43:06  对本文有异议

goto在Java中是一个保留字,但在语言中并没有用到它;Java没有goto。但是,Java也能完成一些类似于跳转的操作,主要是依靠:标签

为什么要使用标签

在迭代语句中,我们可以使用break和continue来中断当前循环。但如果出现循环嵌套的情况,使用break和continue只能中断内层循环,无法控制到外层的循环。这时,我们就可以使用标签结合break和continue,中断内层循环,跳转到标签所在的地方。

标签声明

标签的声明很简单,加个冒号就行,就像下面这样:

label1:

标签使用

在Java中,标签起作用的唯一地方是在迭代语句之前,注意“唯一”,也就是说不能在其它地方单独使用,只能结合迭代语句共同使用。

下面这个例子展示了带标签的break以及continue语句在while循环中的用法:

  1. /**
  2. * @author zouqingfeng
  3. */
  4. public class GotoLabelTest {
  5. public static void main(String[] args) {
  6. int i = 0;
  7. label1: while (true) {
  8. System.out.println("----------------外层循环开始----------------");
  9. while (true) {
  10. i++;
  11. System.out.println("i=" + i);
  12. if (i == 1) {
  13. System.out.println("continue");
  14. continue;
  15. }
  16. if (i == 3) {
  17. System.out.println("continue label1");
  18. continue label1;
  19. }
  20. if (i == 5) {
  21. System.out.println("break");
  22. break;
  23. }
  24. if (i == 7) {
  25. System.out.println("break label1");
  26. break label1;
  27. }
  28. System.out.println("----------------内层循环结束----------------");
  29. }
  30. System.out.println("----------------外层循环结束----------------");
  31. }
  32. System.out.println("End");
  33. /* Output:
  34. ----------------外层循环开始----------------
  35. i=1
  36. continue
  37. i=2
  38. ----------------内层循环结束----------------
  39. i=3
  40. continue label1
  41. ----------------外层循环开始----------------
  42. i=4
  43. ----------------内层循环结束----------------
  44. i=5
  45. break
  46. ----------------外层循环结束----------------
  47. ----------------外层循环开始----------------
  48. i=6
  49. ----------------内层循环结束----------------
  50. i=7
  51. break label1
  52. End
  53. */
  54. }
  55. }

 从打印的结果可以看出

当i==1时,执行continue后,没有执行“内层循环结束”打印语句,而是打印了“i=2”,说明continue使执行点回到内层循环起始处,并继续下一次迭代。

当i==3时,执行continue label1后,没有执行“内层循环结束”打印语句,也没有执行“外层循环结束”,而是打印了“外层循环开始”,说明带标签的continue,对内外层循环都起作用,continue label1同时中断内外层循环,直接跳转到label1标签处,随后,从外部循环开始下一次的迭代。

当i==5时,执行break后,没有执行“内层循环结束”,但执行了“外层循环结束”,说明break只中断并跳出内层循环,回到了外层循环中。

当i==7时,执行break label1后,直接打印了“End”,说明带标签的break,对内外层循环都起作用,break label1同时中断内外层循环,直接跳转到label1标签处,但并不重新进入迭代。也就是说,break label1完全终止了两个循环。

总结

  1. 一般的continue只会对其所在的循环起作用,退回循环的开头,并继续执行。
  2. 带标签的continue会使执行点到达标签的位置,并重新进入紧接在标签后的循环。
  3. 一般的break会中断并跳出当前循环。
  4. 带标签的break会中断并跳出标签所指的循环。
  5. 在Java中,标签起作用的唯一地方是在迭代语句之前。
  6. 在Java中,使用标签的唯一理由是有嵌套循环存在,并且想从多层嵌套中break或continue。

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号