2017-05-23 80 views
0

我试图分析java代码并查看它做了什么,但在“中断标签”行中出现“未定义标签”错误。从我的理解Java不像C#允许闯入当前范围之外的范围。这不正确吗? 使用标签中断时java中出现“未定义标签”错误

if (conditions) { 
    // some code 
    if (conditions) { 
    break label; 
    } 
    // some code 
} 

for (;;) { 
    if (conditions) { 
    // some code 
    } 
    // some code 
    break; 
    label: 
    // some code 
} 
+2

好悲伤。什么可怕的代码。如果它给出编译器错误,它不会“做”任何事情,所以没有必要分析它。 –

+0

@AndyTurner反编译,我猜它是反编译器的错误。 – Azilvl

+0

如果您的反编译器生成不可编译的代码,它真的值得使用吗? –

回答

4

在你的榜样,你要使用break label;,就好像是类似于C/C++的语法goto label;。这不是它在Java中的工作原理。

在Java中,break label;语法仅适用于使用嵌套循环并且需要从内部循环跳转到有问题的外部循环时。

例如:

outer: while(some condition) { 
    inner: while(another condition) { 
     innermost: while(yet another condition) { 
      if(breaking_condition) { 
       break inner; 
      } else if (one more breaking condition) { 
       break outer; 
      } 
     } 
    } 
} 

从甲骨文参见本教程:

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html


希望这有助于!

+1

所以java不允许跳到范围之外的一条线? – Azilvl

+1

没错。它没有 – anacron