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();
}
}