引言
无聊,翻源代码,看到不能理解的东西了。
源代码
以下代码引自String中toLowerCase方法的一部分
/* Now check if there are any characters that need to be changed. */
scan: {
for (firstUpper = 0 ; firstUpper < len; ) {
char c = value[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;
}
理解
这个东西第一感觉就是C中的标签,通过todo进行跳转到某一个代码位置,但是Java不支持todo,所以就很迷,然后break中平时使用是 break不加任何后缀的,但是这里面break添加了“标签”,所以没那么简单。
实践&验证
System.out.println("#START");
a:
{
for (int i = 0; i < 5; i++) {
System.out.println("S-FLAG-" + i);
for (int j = 0; j < 6; j++) {
System.out.println(j);
if (j == 5) {
break a;
}
}
System.out.println("E-FLAG" + i);
}
System.out.println("----");
}
System.out.println("#END");
此时输出的结果为:
#START
S-FLAG-0
0
1
2
3
4
5
#END
如果把break a;换成break; ,那么输出的是如下:
#START
S-FLAG-0
0
1
2
3
4
5
E-FLAG0
S-FLAG-1
0
1
2
3
4
5
E-FLAG1
S-FLAG-2
0
1
2
3
4
5
E-FLAG2
S-FLAG-3
0
1
2
3
4
5
E-FLAG3
S-FLAG-4
0
1
2
3
4
5
E-FLAG4
----
#END
结论
综上可以发现,这种用法可以跳出多层循环,类似于return方法跳出循环,但是这也可以理解成把自己定义成了一个方法,然后return了,方法中的方法,这也解释的通System.out.println("----");方法没有执行了。
求助
如果哪位大佬知道这个方法叫什么名字,以及相关的说明,欢迎评论。

评论 0
还没有评论,来说点什么吧。