我能够编译并运行以下代码片段,但我不能再添加任何代码,以便使用带标签的语句。因此,我是否正确地认为这种陈述没有合理用途? (Java允许我这样做,这就是我问的原因。)
statement: System.out.print("This represents a \'standalone\' statement.");
另外,我正在学习Java,并且发现(仅仅是为了一些“微不足道的乐趣”)Java允许以下代码片段编译好。
labelID: System.out.println("Label identifiers are allowed to be - ");
labelID: System.out.println("the same.");
// Labels can be "chained together", and you can "break out of" any of them.
label1:
label2:
label3: break label1; // Can be break label1, 2, or 3.
// Labels can be associated with "null statements"
label: {}
label: ;
答案 0 :(得分:1)
经典的例子是:
outer: while (...) {
inner: while (...) {
if (...) break outer;
}
}
从编译器前端(词法分析器/解析器)的角度来看,我想让它们在任何地方都比较容易。不是任何实际的东西。一旦有人发布了令人印象深刻的反例,我会删除我的答案:)
答案 1 :(得分:1)
我的猜测是,这是对使用goto
和标签的Java标准化控制流的一些历史意图的回忆,这些标记尚未达到Java的公开发布。
我正在考虑将此问题与goto
关键字结合使用,该关键字仍在Java中保留,但没有包含它的有效语法。