【问题标题】:Unknown structure in java 1.6 [duplicate]java 1.6中的未知结构[重复]
【发布时间】:2018-08-08 04:19:30
【问题描述】:

我正在处理一个遗留项目,我发现了类似的东西:

test:{
        if(1 == 1) {
            System.out.println("Oups");
            break test;
        }
        System.out.println("Hello World");
    }

我用谷歌搜索,但似乎没有什么与这种结构相匹配。

当然,这部分代码编译运行... ????

有人知道那是做什么的吗?

【问题讨论】:

  • test: 称为标签。就像在循环中一样,break 跳转到块的末尾。虽然它有效,但标签通常过于混乱,部分原因是它们很少使用,所以我会避免使用它们。自 1.0 版以来,这一直是 Java 的一部分,并且在 Java 10 中仍受支持。
  • @PeterLawrey:我不知道Java,但是.NET框架内部实现使用了很多标签。
  • @PeterLawrey:好的,谢谢

标签: java java-6 legacy-code legacy-app


【解决方案1】:

跳出标签(Tutorial):

label: for (int i = 0; i < x; i++) {
    for (int j = 0; j < i; j++) {
        if (something(i, j)) break label; // jumps out of the i loop
    }
} 
// i.e. jumps to here

【讨论】:

    【解决方案2】:

    它被称为label

    它与break 一起使用,在其他语言中执行类似于goto 的操作。

    更多详情您可以找到here

    【讨论】:

      【解决方案3】:

      test: 称为标签。就像在循环中一样,break 跳转到块的末尾。标签用于定义中断跳转到的位置。请注意,范围的开头并不重要,前提是结尾是您需要的地方,因此您实际上是在标记结尾而不是要中断的代码的开头。

      虽然它有效,但标签通常会与 if 语句混淆,部分原因是它们很少使用,所以我会避免使用它们。如果你可以写一些带有标签的东西,你通常可以不使用方法来写,或者在这种情况下使用elseif

      如果可以的话,即使使用带有循环的标签也应该避免。

      自 1.0 版以来,这已成为 Java 的一部分,并且在 Java 10 中仍受支持。

      【讨论】:

      • 为什么不是那个链接问题的副本?
      • @ThomasWeller 链接的问题没有说明break 的作用。
      • @ThomasWeller break 只是题为“未知结构”的问题的附带问题;如果它里面没有break,它也不会是重复的,因为它里面有if
      • @GeorgeJempty break 对这个结构至关重要,没有它就没有意义。
      【解决方案4】:

      正如 cmets 已经说过的,这是一个 break 可以跳到/跳出的标签。更多信息在这里:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-23
        • 1970-01-01
        • 1970-01-01
        • 2013-03-08
        • 2016-12-07
        • 1970-01-01
        • 2012-12-14
        相关资源
        最近更新 更多