Java标签的使用

无简介

常用方法

int i = 0;
System.out.println(“start”);
for (; true; i++) {
if (i == 5) {
break;
}
system.out.println(i);
}
System.out.println(“finish”);

输出如下:

start 0 1 2 3 4 finish

int i = 0;
System.out.println(“start”);
for (; i < = 12; i++) {
if (i == 10) {
continue;
}
System.out.println(i);
}
System.out.println(“finish”);

输出结果:

start 0 1 2 3 4 5 6 7 8 9 11 12 finish

东西很简单,从上面我们可以看出来:

  • break,直接退出当前循环(根据输出结果中没有5以及5之后的来想)
  • continue,退出本次循环,继续当前循环的下次循环(跟你输出结果中没有10来想想)

使用标签

标签就是后面跟有冒号的标识符,学过C的应该知道C的goto语句,就是运行到goto的时候直接跳转到标签所在的位置继续执行。

在Java中,取消了goto语句,但是保留了标签来进行跳转。来看一段Thinking Java书中的代码:

int i = 0;
outer: // Can’t have statements here
for (; true;) { // infinite loop
inner: // Can’t have statements here
for (; i < 10; i++) {
print("i = " + i);
if (i == 2) {
print(“continue”);
continue;
}
if (i == 3) {
print(“break”);
i++; // Otherwise i never
// gets incremented.
break;
}
if (i == 7) {
print(“continue outer”);
i++; // Otherwise i never
// gets incremented.
continue outer;
}
if (i == 8) {
print(“break outer”);
break outer;
}
for (int k = 0; k < 5; k++) {
if (k == 3) {
print(“continue inner”);
continue inner;
}
}
}
}
System.out.println(“finish”);

对照着输出结果我们来看看它是如何来运行的。

输出结果:

i = 0
continue inner
i = 1
continue inner
i = 2
continue
i = 3
break
i = 4
continue inner
i = 5
continue inner
i = 6
continue inner
i = 7
continue outer
i = 8
break outer
finish

可以看到外部的那个for语句是一个无限循环,直接进去之后,到第二层循环,循环的条件为i<10,每次运行完成i++。现在我们刚刚进入,i还是默认的0,先输出一个当前的i的值。然后开始依次和2,3,7,8进行对比,发现不相等之后,执行下面的for语句,这些都简单,就不仔细说了。

当i=2了,与2进行判断的时候为true,执行continue,终止本次循环(如果没有终止本次循环的话,continue inner也是应该出现的吧)

当i=3了,看到了break,那么退出当前离他最近的循环,但是因为它还在第一层循环里,所以他有开始继续从i=4开始往下执行

当i=7了,执行了continue outer,根据continue的德行,它还得继续往下执行,所以它又进入了第一层循环,然后第二层循环。。。

当i=8了,执行了break outer,break比continue有骨气多了,好马不吃回头草,我出来就不进去了,所以直接跳过循环,到了程序的下一句,输出finish

看懂了上面的这些,第三层for里面的continue inner就应该懂了

然后,如果我把第三层for里面的continue inner换成break inner呢?break你硬气,不吃回头草是不是?

看输出:

i = 0 continue inner … … …

生活所迫,原谅它吧

原谅他了吧,然后再来说说为什么有的continue或者break语句前面有的加了i++,有的没有加。

在for循环中,只有到达for循环的末尾的时候。才会执行for循环中的step。所以如果没有执行到for循环的末尾,是不会执行i++操作的。

对于break来说,当程序看到break的时候,会直接退出当前循环,所以并没有执行i++,为了避免下次i还是同样的值,我们要手动给他的值来加1

而对于continue来说,会退出当前的本次循环,是会执行到循环末尾的,所以不用手动给i来加1

对于continue xxx来说,看到这个之后就直接跳到标签的地方去执行了,那么它也就不会执行到循环的末尾。所以我们也要手动给他的值来加1.

-------------本文结束  感谢您的阅读-------------
下次一定