📅  最后修改于: 2020-03-18 12:16:26             🧑  作者: Mango
Java不支持goto,但是goto被保留作为关键字,以防他们想将其添加到更高版本中。
在Java中使用带有标签label的中断
// Java程序,展示使用label和break来代替goto
// 文件名: Main.java
public class Main {
public static void main(String[] args)
{
// label用作外部循环
outer:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j == 1)
break outer;
System.out.println("j = " + j);
}
} // 外部循环结束
} // end of main()
} // Main类的结束
输出:
j = 0
在Java中使用带有标签label的continue
我们也可以使用continue代替break。例如,请参见以下程序。
// Java程序,展示使用label和continue来代替goto
// 文件名: Main.java
public class Main {
public static void main(String[] args)
{
// label的外部循环
outer:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j == 1)
continue outer;
System.out.println(" value of j = " + j);
}
} // 外部循环结束
} // main()方法的结束
} // Main类的结束
输出:
value of j = 0
value of j = 0
value of j = 0
value of j = 0
value of j = 0
value of j = 0
value of j = 0
value of j = 0
value of j = 0
value of j = 0
说明:由于continue语句跳至循环中的下一个迭代,从0到9迭代10次。因此,外部循环执行10次,内部for循环在每个外部循环中执行1次。
Java没有goto语句,因为它提供了一种以任意和非结构化方式进行分支的方法。这通常会使陷入困境的代码难以理解和维护。它还禁止某些编译器优化。但是,在一些地方,goto是用于流控制的有价值且合法的构造。例如,当您从深度嵌套的一组循环中退出时,goto很有用。为了处理这种情况,Jave定义了break语句的扩展形式。
带标签label的break语句的一般形式为:
break label;
范例1:
// Java代码
public class Label_Break1 {
public static void main(String[] args)
{
boolean t = true;
first : {
second : {
third : {
System.out.println("在break之前");
if (t) // break第二个块
break second;
}
System.out.println("这部被执行");
}
System.out.println("第二个块之后");
}
}
}
输出:
在break之前
第二个块之后
例2:
// Java代码
public class Label_Break2 {
public static void main(String[] args)
{
outer:
for (int i = 0; i < 3; i++) // 标签label
{
System.out.print("传入 " + i + ": ");
for (int j = 0; j < 100; j++) {
if (j == 10) {
break outer; // 跳出两个循环
}
System.out.print(j + " ");
}
System.out.println("这不会被打印");
}
System.out.println("循环结束.");
}
}
输出:
传入 0: 0 1 2 3 4 5 6 7 8 9 循环结束.