Java中替代goto语句的方法

86

goto关键字在Java中没有对应的替代函数。


10
@harigm问道:“如果Java中有goto语句,你可以举个例子展示你会写什么样的代码吗?我认为这才是更重要的问题所在。” - polygenelubricants
3
@harigm:我赞同polygene的观点,您能否更新一下您的问题,说明为什么您的程序需要使用goto语句? - Everyone
13
人们总是谈论永远不要使用goto,但我认为有一个非常好的现实用例是相当知名和经常使用的。那就是确保在从函数返回之前执行一些代码。通常情况下,这些代码是释放锁或类似的操作,但在我的情况下,我希望能够在返回之前跳转到一个break语句,以便我可以进行必需的强制清理操作。当然,如果程序到处都是goto语句,那将是可怕的,但如果限制在方法体中,只要遵循约定(只跳转到函数末尾,永远不要返回),看起来并不会太糟糕。 - Matt Wolfe
7
你身处于好的公司中。Linus Torvalds 曾激烈地为 goto 语句进行辩护 http://kerneltrap.org/node/553。毫无疑问,这是 Project Coin 中最显著的遗漏。 - Fletch
7
在那个例子中,@MattWolfe尝试使用try-finally完成任务吗? - Andres Riofrio
显示剩余14条评论
12个回答

-1

使用标记的break作为goto的替代方案。


这个回答是多余的,而且一直都是这样。 - Stephen C

-1
Java没有goto,因为它会使代码变得不结构化不清晰。但是,你可以使用breakcontinue作为goto文明形式,而不会出现它的问题。

使用break向前跳转 -

ahead: {
    System.out.println("Before break");
    break ahead;
    System.out.println("After Break"); // This won't execute
}
// After a line break ahead, the code flow starts from here, after the ahead block
System.out.println("After ahead");

输出:

Before Break
After ahead

使用continue向后跳转

before: {
    System.out.println("Continue");
    continue before;
}

这将导致一个无限循环,因为每次执行 continue before 这一行时,代码流将从 before 开始重新执行


2
你关于使用continue向后跳转的例子是错误的。你不能在循环体外使用"continue",这会导致编译错误。然而,在循环内部,continue只是跳过循环条件。所以像while(true){continue;}这样的东西将是一个无限循环,但是while(true){}也是一样的。 - Ben Holland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接