项籍少时,学书不成,去;学剑,又不成。项梁怒之。籍曰:“书足以记名姓而已。剑一人敌,不足学,学万人敌。”于是项梁乃教籍兵法,籍大喜,略知其意,又不肯竟学。
摘录这段是警示自己不要不肯竟学,力求搞通每个点。
break和continue是老生常谈的东西,break是终止这层循环,包括之后的本层循环,continue是终止本次循环的语句,继续之后的本层循环。
在只有一层循环的时候,带标签和不带标签是没有区别的,以下都用break做试验。
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println("i = " + i);
if (i == 3) {
break;
}
}
tag:
for (int j = 0; j < 10; j++) {
System.out.println("j = " + j);
if (j == 3) {
break tag;
}
}
}
输出是
i = 0
i = 1
i = 2
i = 3
j = 0
j = 1
j = 2
j = 3
同时我的IDE也智能地提示这个是一个不必要的标签。
但对于两层及以上的嵌套循环,标签就有用了,先看不带标签的
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.println("i = " + i);
for (int j = 0; i < 3; j++) {
System.out.println("j = " + j);
if (j == 1) {
break;
}
}
}
}
输出是
i = 0
j = 0
j = 1
i = 1
j = 0
j = 1
i = 2
j = 0
j = 1
可见,这个break只是终止了本层的循环,对于它上层的无能为力,再看带tag的
public static void main(String[] args) {
tag:
for (int i = 0; i < 3; i++) {
System.out.println("i = " + i);
for (int j = 0; i < 3; j++) {
System.out.println("j = " + j);
if (j == 1) {
break tag;
}
}
}
}
输出为
i = 0
j = 0
j = 1
总结一下,带标签的break和continu影响的范围是紧接着标签后的那个整体的语句块。