Java 中的标签语句

Java 中的标签语句

原文: https://howtodoinjava.com/java/basics/labeled-statements-in-java/

Java 标签块在逻辑上类似于 C/C++ 中的goto语句。

标签是任何有效的 Java 标识符,后跟冒号。 例如external:inner:inner123:inner_:

1. String类中的标签语句

多少次我们被告知goto语句是邪恶的。 我本人已经通过我们这个时代许多受人尊敬的作者读到了这种所谓的邪恶。 但是,如果您查看String.java的源代码,并阅public String toLowerCase(Locale locale)方法的源代码,则您将遇到类似这样的情况 :

scan :
    for (firstUpper = 0 ; firstUpper < count; ) 
    {
        char c = value[offset+firstUpper];
        if ((c >= Character.MIN_HIGH_SURROGATE) &&
            (c <= Character.MAX_HIGH_SURROGATE)) {
            int supplChar = codePointAt(firstUpper);
            if (supplChar != Character.toLowerCase(supplChar)) {
                break scan;
            }
            firstUpper += Character.charCount(supplChar);
        } else {
            if (c != Character.toLowerCase(c)) {
                break scan;
            }
            firstUpper++;
        }
    }
    return this;
}

这是scan:。 这是我们今天将要学习的标签块。 好吧,他们总是告诉我们不要使用它们,并在 JDK 分发中最常用的类中使用了它们。

2. 带有breakcontinue关键字的标签语句

在 Java 中,我们都知道关键字breakcontinue的存在目的。 基本上,语句breakcontinue会更改复合语句的常规控制流。

2.1 带有和不带有标签语句的break关键字

while (Some condition) 
{
  if ( a specific condition ) 
  		break;        //Default usage
  else
  		normal business goes here..
}

另一种方法是将break与标签语句一起使用。

hackit:
while (Some condition) 
{
  if ( a specific condition ) 
  		break hackit;       //Usage with label
  else
  		normal business goes here..
}

每当在程序执行过程中,遇到带标签的break语句,该控制都会立即退出封闭的带标签的块。

同样,带标签的continue将使控制重新开始。 就像在普通的breakcontinue语句中一样,为块赋予了其他名称。

2.2 更多例子

让我们来看更多示例用法:

outer: for (int i = 0; i &lt; 10; i++) {
  inner: for (int j = 10; j > 0; j--) {
    if (i != j) {
      System.out.println(i);
      break outer;
    }else{
      System.out.println("-->>" + i);
      continue inner;
    }
  }
}

或者

int a = 10;
int b = 12;

block1: {
    if (a &lt; 0) {
      break block1;
    }
    if (b &lt; 0) {
      break block1;
    }
    System.out.println( a + b );
  }
}

3. 总结

  • Java 没有通用的goto语句。
  • Java 中的breakcontinue语句更改了复合语句的常规控制流。 他们可以使用带有冒号的有效的 Java 标识符作为标签。
  • 带标签的块只能与breakcontinue语句一起使用。
  • 必须在其范围内调用它们。 您不能引用它们标签的块的范围。
  • break语句立即跳到相应复合语句的末尾(或跳出)。
  • Continue语句立即跳转到相应循环的下一个迭代(如果有)。
  • Continue语句不适用于switch语句或块语句,仅适用于循环的forwhiledo-while循环的复合语句。

学习愉快!