java - 这段Java代码是什么意思?

标签 java syntax label case

最近碰巧写了一段类似这样的代码:

switch (x) {
    case a: case b: case c:
    // do something
    break;
    case d: case e: case f:
    // do something
    break;
}

然后,我写错了,写了一段类似的代码,语法错误:忘记写case关键字了:

switch (x) {
    case a: b: c:
    // do something
    break;
    case d: e: f:
    // do something
    break;
}

这种语法在其他一些语言中实际上有效并且开关会传递所有值。

实际上这里也是有效的,因为我没有得到任何语法错误:但是顺利执行切换的程序的错误行为,只是缺少没有 case 关键字的值。

为什么? b; 是什么意思? c:、e: 和 f: 在第二个片段中是什么意思?

它们可能是标签吗?然后,他们怎么可能在同一条线上?我错过了什么,我不明白这个奇怪的非错误背后的原因?

编辑:它们似乎确实是标签。这是不寻常的,正如@Bathsheba 所解释的那样,问题是标签通常位于一行的开头。奇怪的是 Java 如何允许这种令人困惑的(在我看来)语法,甚至没有显示警告。 这确实会在长程序中造成很多困惑和奇怪的错误。

谢谢。

最佳答案

在第二种情况下,b:c:e:f:是< em>标签。在 Java 中,您可以break 到标签,并且该语言允许您在各种地方插入标签,包括您拥有的地方。

看到标签不在一行的开头是不寻常的,仅此而已。

关于java - 这段Java代码是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41189239/

相关文章:

Java在对象构造函数中启动线程池

java - 将上下文路径添加到 SLF4J 日志语句

ios - 使用{…in}的Swift闭包语法

python - 使用 Igraph for Python 绘制边缘标签或类似内容

java - AES 加密以 ECB 模式实现,但不符合安全要求。如何实现CBC模式

java - 如何重构我的日期/时间以允许根据用户的区域设置日期?

C 中的复合语句表达式

c - Visual Studio C 语法着色问题

css - Bootstrap 3 : form label position depending on master column

javascript - 无法使用 JavaScript 更改标签文本