Java为什么没有goto语句

       Java语言可以通过给语句添加标号来赋予它们名称,我们可以使用这些名字来引用语句。标号位于它所要命名的语句之前,每条语句只允许有一个标号。这个有点类似汇编语言中循环时也需要用到标记一样,或者想其它语言所拥有的goto语句一样。但是在Java中,标号只能被break语句和continue语句引用,原因是,goto语句允许在代码中不加选择地任意跳转,这将造成控制流的混乱,而引用某个标号的break语句或continue语句只会退出或重复特定的被表示过的块,这时的控制块显然是受控制的。举两个例子:

break+标记:

package moveup;

public class Test {
	public static void main(String[] args) {
		out: {
			for (int i = 0; i < 3; i++) {
				for (int j = 0; j < 3; j++) {
					System.out.println(i+","+j);
					if (j == 2) {
						break out;
					}
				}
			}
			System.out.println("out complished."); //直接被略过
		}
	}
}

continue+标记:

package moveup;

public class Test {
	public static void main(String[] args) {
		out: for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				System.out.println(i + "," + j);
				if (j == 1) {
					continue out;
				}
			}
		}
		System.out.println("out complished.");
	}
}

重点:无标号的break会终止最内层的switch、for、while、或do语句,并且它也只能出现在这些语句当中;有标号的break可以终止任何被标号标示过的语句。continue语句只能在循环(for、while或do)中使用,它将控制流转到最内层循环体的末尾并且继续执行;而有标号的continue会把控制流转到带有那个标号的循环的末尾,但这个标号必须属于某个循环语句

package moveup;

//有标号的break语句用法
public class Test {
	public static void working(boolean flag) {
		System.out.println("case " + flag + ":");
		out: {
			if (flag == true) {
				break out;
			}
			System.out.println("working...");
		}
		System.out.println("completed.\n");
	}

	public static void main(String[] args) {
		Test.working(false);
		Test.working(true);
	}
}


你可能感兴趣的:(Java为什么没有goto语句)