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

时间:2013-08-10 12:59:12

标签: java goto

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

    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;
        }
    }
}

3 个答案:

答案 0 :(得分:3)

你可以这样做

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 '*'");

答案 1 :(得分:2)

是的,但是没有使用goto的原因。它是可怕的。如果你只是好奇,这是一种方法:

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

如果您想以正确的方式做到这一点,请询问您的真实问题并陈述您的最终目标,以便我们帮助您进行设计。 :)

答案 2 :(得分:2)

您可以使用continue移动到代码中的不同标签:

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);
    }
}

输出:

I am here
j: 0
j: 1
I am here
I am here
temp = 1

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

来源:James Gosling, Q&A session