C 中的goto语句及其对应语句伴随着一个Label参数。在定义的方法中,goto label;
语句将触发执行标签的例程。以下是 Greg Rogers 在这篇文章中演示的示例。
void foo()
{
if (!doA())
goto exit;
if (!doB())
goto cleanupA;
if (!doC())
goto cleanupB;
// everything succeed
return;
cleanupB:
undoB();
cleanupA:
undoA();
exit:
return;
}
Agoto
在 Java 中可能是一个非常有效的工具,但 Java 并不明确支持该goto
关键字,即使该关键字已被语言保留。使用break语句将使命令跳出标签继续执行标签后面的语句。
例子:
public class Klass {
public static void main(String[] args) {
// code goes here...
__main:
{
if(args.length==0)
{
break __main;
}
}
//code after label
}
}
这个包com.sun.org.apache.bcel.internal.generic.GOTO
,我没有亲自使用过,但我认为它可以帮助实现与 Greg Rogers 演示的相同的代码结构,如下所示:
void foo()
{
if (!doA())
GOTO exit;
if (!doB())
GOTO cleanupA;
if (!doC())
GOTO cleanupB;
// everything succeed
return;
cleanupB:
undoB();
cleanupA:
undoA();
exit:
return;
}
void undoB(){}
void undoA(){}
boolean doC(){return false;}
boolean doA(){return false;}
boolean doB(){return false;}