为什么Java允许在任意语句上使用带标签的中断?
2022-09-04 01:39:58
我今天才知道,下面的Java代码是完全合法的:
myBlock: {
/* ... code ... */
if (doneExecutingThisBlock())
break myBlock;
/* ... more code ... */
}
请注意,这不是一个循环 - 它只是我用大括号分隔的一个代码块。myBlock
这似乎是一个相当奇怪的功能。这意味着您可以使用 named to breakout 语句或匿名块,尽管您通常不能在这些上下文中使用语句。break
if
break
我的问题是:这个设计决策有充分的理由吗?也就是说,为什么要这样做,以便您只能使用带标签的s而不是常规s来打破某些封闭语句?为什么要允许这种行为呢?考虑到Java作为一种语言是如何(相对)精心设计的,我认为这是有原因的,但老实说,我想不出一个。break
break