Java Label

在Java中“{”和“}”组成一个代码块(code block),如我们最常用到的static代码块,而每个代码块都可以用一个Label,Label不是Java中的关键字,而是一个任意的标识符。由于我们一般不怎么用Label,此时难免会有人问:Label到底有什么用呢?大家不要急,且听我慢慢道来。

试想一个这样的场景:有一个两重循环,但是当在内层循环中找到了满足的条件,就停止两重循环就退出执行。不难想到肯定会用break关键字,但是如果仅仅是break,那么Java默认只会退出当前循环,即内层循环。如:

for(int i = 0; i < 4; i++){
	for(int j = 0; j < 4; j++){
		System.out.println("Even number: " + i + ", break  from INNER label");
		if(i == 1){
			break;
		}
	}
}

输出:

Even number: 0, break  from INNER label
Even number: 0, break  from INNER label
Even number: 0, break  from INNER label
Even number: 0, break  from INNER label
Even number: 1, break  from INNER label
Even number: 2, break  from INNER label
Even number: 2, break  from INNER label
Even number: 2, break  from INNER label
Even number: 2, break  from INNER label
Even number: 3, break  from INNER label
Even number: 3, break  from INNER label
Even number: 3, break  from INNER label
Even number: 3, break  from INNER label

此时,根本没有达到我们想要的结果,但是当我们加上Label就可以很容易实现了:

//Outer loop checks if number is multiple of 2
OUTER:  //outer label
for(int i = 0; i < 4; i++){
	INNER:  //inter label
	for(int j = 0; j < 4; j++){
		System.out.println("Even number: " + i + ", break  from INNER label");
		if(i == 1){
			break OUTER;
		}
	}
}

输出:

Even number: 0, break  from INNER label
Even number: 0, break  from INNER label
Even number: 0, break  from INNER label
Even number: 0, break  from INNER label
Even number: 1, break  from INNER label

其实,细心的读者可能会想到continue关键字也应该有类似的功能。如下,我们在遇到偶数时,就continue外层循环;遇到奇数时,就break内层循环:

//Outer loop checks if number is multiple of 2
OUTER:  //outer label
for(int i = 0; i < 4; i++){
	if(i % 2 == 0){
		System.out.println("Odd number: " + i + ", continue from OUTER label");
		continue OUTER;
	}

	INNER:  //inter label
	for(int j = 0; j < 4; j++){
		System.out.println("Even number: " + i + ", break  from INNER label");
//      if(i == 1){
//           break OUTER;
//      }
		break INNER;
	}
}

输出:

Odd number: 0, continue from OUTER label
Even number: 1, break  from INNER label
Odd number: 2, continue from OUTER label
Even number: 3, break  from INNER label

当然,如最开始所说Label是标志“{”和“}”组成的代码块,那么就意味着不仅而已用于标识循环,if和普通代码也可以标识:

boolean flag = true;
JUDGE:
if(flag){
	System.out.println("It is " + flag);
}

CODE:{
	int a = 4;
	int b = 5;
	System.out.println(a * b);
}

但是,Label通常是和break和continue一起使用的。



你可能感兴趣的:(Java)