我为什么要给If语句命名?

时间:2011-02-05 01:36:10

标签: java if-statement naming

我刚刚发现我可以为For和While语句命名。我知道如果你想打破或继续一个特定的循环,这是有用的 但为什么我要给一个名字?它看起来毫无用处

name: if(true){
    //do something
}

编译没有问题

4 个答案:

答案 0 :(得分:10)

如果你有一个带有名字的代码块,你可以使用break来退出它,这就是我找到的用于命名块的用法。

name: if(true) {
    // do something
    if(/* condition */) {
        break name;
    }
    // do more
}

它也可以在没有if:

的情况下工作
name: {
    // do something
    if(/* condition */) {
        break name;
    }
    // do more
}

当我的工作出现在某些逻辑上存在一系列保护条件时,以及另一组逻辑将会降低,无论警卫的结果如何。

另一个例子,其中替代结构更难以阅读和修改:

block: if(/* guard */) {

  // prep work

  if(/* guard */) {
    break block;
  }

  // prep work

  if(/* guard */) {
    break block;
  }

  // real work
}

虽然我通常使用裸块而不是if。

答案 1 :(得分:6)

您可以在任何语句块之前使用标签。这可能是最常用于循环的,但在其他地方完全有效。

答案 2 :(得分:2)

Sarah Happy的答案实际上比我的更正确,表明你可以使用break打破代码块,除了循环,所以我建议看看她的答案。


这确实是label,正如你所说的For和While循环。它在其他地方有效,但我想补充一点,不能使用

goto name;

虽然goto是保留字,但Java 支持goto,但它确实以带有break和{{1}的标记循环的形式支持goto }。

如果您扩展了代码示例以包含goto,例如:

continue

您会收到错误,同时说 name: if(true){ //do something } goto name; illegal start of expression

或者,如果您尝试将not a statement与您的标签一起使用,但没有循环,例如:

continue

你得到 name: if(true){ //do something } continue name;

因此,就编译器而言,拥有一个没有循环的标签是可以的,但是如果没有循环它就毫无价值。

答案 3 :(得分:0)

就像打破循环一样,你可能想要跳回或转向if语句。虽然每当你开始考虑这个问题时,请考虑创建一个新方法。