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. 带有break
和continue
关键字的标签语句
在 Java 中,我们都知道关键字break
和continue
的存在目的。 基本上,语句break
和continue
会更改复合语句的常规控制流。
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
将使控制重新开始。 就像在普通的break
和continue
语句中一样,为块赋予了其他名称。
2.2 更多例子
让我们来看更多示例用法:
outer: for (int i = 0; i < 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 < 0) {
break block1;
}
if (b < 0) {
break block1;
}
System.out.println( a + b );
}
}
3. 总结
- Java 没有通用的
goto
语句。 - Java 中的
break
和continue
语句更改了复合语句的常规控制流。 他们可以使用带有冒号的有效的 Java 标识符作为标签。 - 带标签的块只能与
break
和continue
语句一起使用。 - 必须在其范围内调用它们。 您不能引用它们标签的块的范围。
break
语句立即跳到相应复合语句的末尾(或跳出)。Continue
语句立即跳转到相应循环的下一个迭代(如果有)。Continue
语句不适用于switch
语句或块语句,仅适用于循环的for
,while
和do-while
循环的复合语句。
学习愉快!