有没有办法在Java中执行goto函数?

Is there a way to perform a goto function in Java?

本问题已经有最佳答案,请猛点这里访问。

我知道Goto是一个在Java中没有任何用途的关键字。我是否可以使用标签或其他方式执行类似的操作以移动到代码的其他部分?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public static void main(String[] args) {
        for(int i=5; i>0; i--){
            System.out.println();

            first:
            for(int x=i; x<6; x++){
                System.out.print("*");
            }
        }
        System.out.println("print '*'");{
            break first;
        }
    }
}


你可以做到这一点

1
2
3
4
5
6
7
8
9
10
11
first: {
  for(int i=5; i>0; i--){
    System.out.println();
    if (func(i))
       break first;
    for(int x=i; x<6; x++){
        System.out.print("*");
    }
  }
}
System.out.println("print '*'");


您可以使用continue移动到代码中的不同标签,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Label {
    public static void main(String[] args) {
        int temp = 0;
        out: // label
        for (int i = 0; i < 3; ++i) {
            System.out.println("I am here");
            for (int j = 0; j < 20; ++j) {
                if(temp==0) {
                    System.out.println("j:" + j);
                    if (j == 1) {
                        temp = j;
                        continue out; // goto label"out"
                    }
                }
            }
        }
        System.out.println("temp =" + temp);
    }
}

输出:

1
2
3
4
5
6
I am here
j: 0
j: 1
I am here
I am here
temp = 1

不过,我不建议你这么做。有更整洁的方法可以做到这一点,因为JamesGosling在goto语句的支持下创建了原始的JVM,但随后他删除了这个不必要的特性。goto不必要的主要原因是,通常可以用更可读的语句(如break/continue)替换它,或者将一段代码提取到一个方法中。

来源:James Gosling,问答环节


是的,但是goto没有被使用是有原因的。太可怕了。不过,如果你只是好奇的话,有一种方法可以做到:

http://www.steike.com/code/unused/java-goto/

如果你想用一种合适的方式来实现这一目标,问你真正的问题并陈述你的最终目标,这样我们就能帮助你设计它。:)