public class BreakTest
//一次循环体, 这里加不加Label无区别
private static void once() {
for (int index = 0; true; index ++) {
if (index == 10) {
System.out.println("once break:" + index);
break; // 直接跳出本循环 输出一次 index = 10
}
}
Label:// 此处不能有非循环代码,除非用代码块包括如下
for (int index = 0; true; index ++) {
if (index == 10) {
System.out.println("once break Label:" + index);
break Label; // 直接跳出label标志循环
}
}
/*
Label:
{
System.out.println("xxxxxxxxxxxx");
for (int index = 0; true; index ++) {
if (index == 10) {
break Label; // 直接跳出label标志循环
}
}
}*/
}
// 多次循环体, Label真正用处
private static void moreOnce() {
Label:// 标记循环1,break label会跳出 循环1
for (int index = 0; true;) {// 循环1
for (index = 0; true; index ++) {// 循环2
if (index == 10) {
index = 0;
System.out.println("moreOnce break Label:" + index);
sleep(500);
break Label; // 这里break出 Label标记的循环,"moreOnce break Label"只会输出一次
}
}
}
for (int i = 0; i < 10; i++) {//循环1
Label:// 标记循环2,break label会跳出 循环2
for ( int index = 0; true;) {// 循环2
for (index = 0; true; index ++) {// 循环3
if (index == 10) {
System.out.println("moreOnce break Label:" + i);
break Label; // 这里break出 Label标记的循环,"moreOnce break Label"只会出10次(依赖循环1,每次break出循环2),如果标记到循环1,只会输出一次
}
}
}
}
for (int index = 0; true;) {
for (index = 0; true; index ++) {
if (index == 10) {
index = 0;
System.out.println("moreOnce break:" + index);
sleep(500);
break; // 这里break出内循环,外部循环不能跳出;每500毫秒会输出一次
}
}
}
}
private static void sleep(long timeMillis) {
try {
Thread.sleep(timeMillis);
} catch (InterruptedException e) {
}
}
public static void main(String[] args) {
moreOnce();
}
}