有没有在Java中goto语句?(Is there a goto statement in Java

2019-07-03 18:33发布

我很困惑这个问题。 我们大多数人都被告知,没有在Java中任何goto语句。

但是我发现,这是在Java中的关键字之一。 在哪里可以应用? 如果不能使用,那么为什么却包含在Java作为关键字?

Answer 1:

在Java的关键字列表指定goto关键字,但它被标记为“未使用”。

它是在原来的JVM(参见由@VitaliiFedorenko答案 ),但随后删除。 它可能是保持在一个情况下保留关键字它是被添加到Java的更高版本。

如果goto不在名单上,它被添加到语言以后,现有所使用的字码goto作为标识符(变量名,方法名等)将打破。 但由于goto是一个关键字,这样的代码甚至不会编译本,它仍然可能使它实际上做一些事情以后,不破坏现有的代码。



Answer 2:

詹姆斯·高斯林创建了支持原JVM goto语句,但后来他取消了这一功能是不必要的。 的主要原因goto是不必要的是,通常它可以与更多可读语句来替换(如break/continue )或通过提取一段代码到一个方法。

来源: 詹姆斯·高斯林,Q&A环节



Answer 3:

关键字存在,但它没有实现。

唯一的好理由使用goto语句,我能想到的是这样的:

for (int i = 0; i < MAX_I; i++) {
    for (int j = 0; j < MAX_J; j++) {
        // do stuff
        goto outsideloops; // to break out of both loops
    }
}
outsideloops:

在Java中,你可以做到这一点是这样的:

loops:
for (int i = 0; i < MAX_I; i++) {
    for (int j = 0; j < MAX_J; j++) {
        // do stuff
        break loops;
    }
}


Answer 4:

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html

“关键字常量和跳转被保留,即使他们目前没有使用。”



Answer 5:

所以,它们可以被用来如果有一天,语言设计者认为有必要。

另外,如果从语言确实具有这些关键字(如C,C ++)的程序员错误地使用他们,那么Java编译器可以给一个有用的错误消息。

或者,也许这只是停止使用转到程序员:)



Answer 6:

他们被保留供未来使用(参见: Java语言关键字 )

关键字常量和跳转被保留,即使他们目前尚未使用。

之所以没有在Java中没有goto语句可以在“发现Java语言环境 ”:

Java没有goto语句。 研究说明GOTO指令(MIS)使用更多的,往往不是简单的“因为它的存在”。 消除转到导致语言的简化 - 有没有关于goto语句的影响到的中间为发言规则,例如。 研究大约100,000的C代码行所确定的goto语句的,大约90%是纯粹用于获得爆发嵌套循环的效果。 正如上面提到的,多层次的突破,并继续去除大部分的需要goto语句。



Answer 7:

如何使用“继续”标签中的Java是一个例子:

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 // i=0
j: 0
j: 1
I am here // i=1
I am here // i=2
temp = 1


Answer 8:

要明白,重要的是goto结构是从程序员的机器代码和汇编语言编程的天残。 因为这些语言是如此基本的(如,每个指令只做件事),程序控制流与完全做得到goto语句(但在汇编语言,这些被称为或指令)。

现在,虽然C语言是相当低的水平,就可以被认为是非常高级的汇编语言 - 在C中的每个语句和函数可以很容易地分解成汇编语言指令。 尽管C不是首要语言编程与时下电脑,它仍然严重低层次的应用,如嵌入式系统中使用。 因为C的功能,以便密切反映汇编语言的功能,它才有意义, goto包含在C.

很显然,Java是C / C的演变++。 Java的共享了很多来自C的特征,但抽象了更多的细节,因此,简单标记不同。 Java是一种非常高级的语言,所以它根本不需要有这样低级别的功能goto当更多的高层次的结构,如功能,对每个和while循环做程序控制流。 试想一下,如果你在一个函数,做了goto到一个标签到另一个函数。 其他函数返回时,会发生什么? 这种想法是荒谬的。

这并不一定回答为什么Java包含了goto语句却不会让它编译,但要知道为什么它是重要goto首先被使用过,在低级别的应用程序,为什么它只是没有任何意义在Java中使用。



Answer 9:

不, goto不使用,但您可以定义标签和退出循环到标签。 您可以使用breakcontinue后面的标签。 所以,你可以跳出一个以上的循环水平。 看看教程 。



Answer 10:

没有,谢天谢地,没有goto Java编写的。

goto关键字仅保留,但不能使用(这同样适用const )。



Answer 11:

因为它不支持,为什么你会希望有一个goto的是什么也没做或命名变量keyword goto

虽然你可以使用break label;continue label; 语句来有效地做goto一样。 但我不会推荐它。

public static void main(String [] args) {

     boolean t = true;

     first: {
        second: {
           third: {
               System.out.println("Before the break");

               if (t) {
                  break second;
               }

               System.out.println("Not executed");
           }

           System.out.println("Not executed - end of second block");
        }

        System.out.println("End of third block");
     }
}


Answer 12:

不, goto不是在Java中使用,尽管是一个保留字。 同样是真正的const 。 上述这些问题都在C ++中,这可能是为什么他们保留的理由使用; 意图可能是为了避免混淆C ++程序员迁移到Java,也许还能保持在Java中的后续版本使用它们的选项。



Answer 13:

正如指出的那样,没有goto Java中,但关键字是保留的情况下,孙觉得加入goto到Java一天。 他们希望能够增加它没有打破太多的代码,所以他们保留的关键字。 需要注意的是使用Java 5他们增加了enum关键字,并没有任何突破那么多的代码。

虽然Java没有goto ,它有一定的结构,其对应的一些使用goto ,即能够breakcontinue与命名的循环。 另外, finally可以被看作是一种扭曲的goto



Answer 14:

请注意,您可以替代大部分转到良性用途

  • 返回

  • 打破

  • 休息标签

  • 扔里面的try-catch-终于



Answer 15:

要禁止的变量声明具有相同的名称。

例如int i = 0, goto;



Answer 16:

这是非常考虑这些东西你不这样做的,但很可能被列为保留字,以避免开发人员混淆。



Answer 17:

http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.goto

如果你被告知,有在Java中,你都被愚弄了没有goto语句。 事实上,Java的由“源”代码两层。



Answer 18:

请参阅以下链接显示所有Java保留字,告诉你在哪里添加什么版本他们。

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html

转到被保留,即使它当前未使用,永不言败但是:)



Answer 19:

我不是一个风扇goto任一,因为它通常使得码的可读性。 不过我相信,也有例外到规则(尤其是当它涉及到词法分析器和解析器!)

当然,你可以随时将其转换成一些汇编样把你的程序到克莱尼Normalform,然后写类似

int line = 1;
boolean running = true;
while(running)
{
    switch(line++)
    {
        case 1: /* line 1 */
                break;
        case 2: /* line 2 */
                break;
        ...
        case 42: line = 1337; // goto 1337
                break;
        ...
        default: running = false;
                break;
    }
}

(所以你基本上是编写一个执行的二进制代码虚拟机...其中line对应指令指针)

这是这么多比使用代码可读性goto ,是不是?



Answer 20:

因为虽然Java语言不使用它,JVM字节码呢。



Answer 21:

当然,这是关键字,但是它没有在源代码的水平使用。

但是,如果你使用茉莉或其他更低层次的语言,这是转化为字节码,然后选择“转到”有



Answer 22:

后藤不是在Java

你必须使用GOTO但它不工作所以不能用correctly.in关键的Java字。 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html

   public static void main(String[] args) {            
            GOTO me;
            //code;
            me:
            //code; 
            }   
   }


文章来源: Is there a goto statement in Java?