使用标签并在if-else语句中插入

use*_*187 1 java label break

我有这段代码,可以在特定条件下(当x和y都等于零时)从数组生成随机数。我希望控件跳转到标签。但是控件在任何情况下都不会跳转到标签。我想知道我是否做对了?

int[] arr = {0, 1, 2};    
Random rn = new Random();
label: {
    //some code
    if (x != 0 && y !=0) {
        //some code
    } else {
        break label;
    }
}
Run Code Online (Sandbox Code Playgroud)

rat*_*ath 6

没有研究是否应该,是的,你可以使用标记声明与ifJava中。根据1.7规范

标识符声明为立即包含的语句的标签。标识符语句标签与出现在标签语句内任何地方的break(§14.15)或continue(§14.16)语句一起使用。

它继续(强调已添加)

如果该语句由标识符标识,并且包含的​​语句由于与同一标识符的中断而突然完成,则带标签的语句将正常完成。在其他所有突然完成该语句的情况下,带标签的语句由于相同的原因而突然完成。

因此,如果您break使用if块(记住块是语句),则可以退出if主体。让我们测试一下:

public static void main(String[] args) {
    if (true) label: {
        if (args != null)
            break label;
        System.out.println("doesn't get here");
    }
    System.out.println("Outside of labeled block");
}
Run Code Online (Sandbox Code Playgroud)

输出:

Outside of labeled block
Run Code Online (Sandbox Code Playgroud)