Java多标签场景下仅第四个标签支持continue的原因解析
为什么只有
forth标签能和continue配合使用? 兄弟,这个问题其实是Java语法里带标签的continue的规则限制搞的鬼,咱们一步步拆解来看。
首先先把你这段有问题的代码贴出来:
public static void main(String[] args) { first: second: third: forth: for(int i=0;i<5;i++){ System.out.println("outer start"); for(int j =0;j<5;j++){ System.out.println("inner"); } continue first; } System.out.println("end"); }
核心规则:标签必须和循环/switch直接绑定
Java里的continue+标签的用法有个硬要求:标签必须直接关联在一个循环(for/while/do-while)或者switch语句上,而且这个标签对应的循环/switch,必须是包含当前continue语句的外层结构。
你的代码里的问题
咱们看你堆在一起的四个标签:
first:、second:、third:这三个标签,只是单纯的"占位"标签,它们后面没有紧跟着任何循环或switch语句——真正和循环绑定的只有forth:,因为它直接贴在后面的for(int i=0;i<5;i++)循环前面,相当于给这个循环打了标记。- 当你写
continue first;时,Java编译器找不到first:对应的循环/switch结构,它只是一个游离的标签,完全不符合语法要求,所以直接触发编译错误。 - 而如果写
continue forth;就完全没问题,因为forth:明确标记了包含continue语句的外层for循环,编译器能清晰找到对应的循环载体,知道要跳转到哪里。
简单说就是:你把多个标签堆在一起时,只有最后一个标签和后面的循环建立了有效绑定,前面的标签都是"无效"的空标签,自然不能被continue引用。
内容的提问来源于stack exchange,提问作者Ajay Jain
相关产品推荐
相关产品推荐

