gpt4 book ai didi

java - 请解释Labeled Statements的用法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:28:36 25 4
gpt4 key购买 nike

  • breaking 和 continue 是 Java 中标记语句的唯一用途吗?
  • 您什么时候在程序中使用过标记语句?

抱歉,代码片段已被删除。我正在拆分问题

最佳答案

JLS 14.7 Labeled statements

(为清楚起见进行了编辑)

Statements may have label prefixes (Identifier : Statement). The Identifier is declared to be the label of the immediately contained Statement.

Unlike C and C++, the Java programming language has no goto statement; identifier statement labels are used with break (§14.15) or continue (§14.16) statements appearing anywhere within the labeled statement.

因此 JLS 很清楚,标签与 breakcontinue 一起使用,Java 编程语言的其他语法元素都没有使用它。

严格来说,breakcontinue,无论是否标记,永远 都不是必需的。它们总是可以从代码中写出来。但是,按照惯用的方式使用它们可以使代码更具可读性。


这是一个说明性示例:给定一个 int[],我们想要:

  • 1 上打印 "One (1)"
  • 2 上打印 "Two (2)"
  • 0 上打印 “零”
  • 立即停止处理任何其他号码

    int[] arr = { 1, 2, 0, 1, -1, 0, 2 };
    loop:
    for (int num : arr) {
    switch (num) {
    case 1:
    System.out.print("One ");
    break;
    case 2:
    System.out.print("Two ");
    break;
    case 0:
    System.out.print("Zero ");
    continue loop;
    default:
    break loop;
    }
    System.out.print("(" + num + ") ");
    }
    // prints "One (1) Two (2) Zero One (1) "

这里我们看到:

  • 不同的数字在一个switch中处理
  • switch 中未标记的break 用于避免 case 之间的“fall-through”
  • 带标签的continue loop;用于跳过case 0的后处理:(这里不需要标签)
  • Labeled break loop; 用于在 default: 上终止循环(标签 在这里是必需的;否则它是一个 切换中断)

因此标记为break/continue 也可以在嵌套循环之外使用;当 switch 嵌套在循环中时可以使用它。更一般地,当可能有多个 break/continue 目标时使用它,并且您想选择一个不立即包含 break/continue 语句。


这是另一个例子:

    morningRoutine: {
phase1: eatBreakfast();
if (grumpy) break morningRoutine;
phase2: kissWife();
phase3: hugChildren();
}
http://stackoverflow.com is the best website ever!

这是另一种情况,标记的 break 不是在迭代语句中使用,而是在简单的 block 语句中使用。有人可能会争辩说标签会带来更好的可读性;这一点是主观的。

不,最后一行不会给出编译时错误。它的灵感实际上来自 Java Puzzlers谜题 22:URL 欺骗。不幸的是,这个难题并没有更深入地“正确”使用标记语句。

关于java - 请解释Labeled Statements的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2710422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com