Java中未标记break语句编译失败,原因何在?
Java中break语句的核心规则你没注意到
这里的关键是Java对带标签break和无标签break的语法规则做了严格区分:
- 无标签的
break:只能用在switch语句或者循环(for/while/do-while)内部,作用是跳出当前的switch结构,或者跳出最近的那一层循环。你在bar:标记的普通代码块里用无标签break,既不在switch里也不在循环里,完全不符合语法,所以编译器直接报错。 - 带标签的
break:可以用来跳出任何带有对应标签的代码块(包括普通的{}代码块),只要标签和break语句在同一个方法内,且标签定义在目标代码块的开头就行。你第一个例子里的break foo;就是这种情况,明确指定跳出foo:标记的代码块,所以编译运行都没问题。 - 至于第三个
baz:的代码块,只是定义了标签但没有使用,Java编译器不会因为“定义了标签却不用”报错,标签本身是可选使用的,所以这段代码能正常编译并打印Hello World。
简单总结:无标签break只能在switch/循环里用,带标签break才能用来跳出普通代码块,这就是你忽略的核心语法规则。
内容的提问来源于stack exchange,提问作者nakhodkin
相关产品推荐
相关产品推荐

