Ell*_*der 1 java methods label goto function
在Java 8中,有些情况下我希望程序指向方法的特定部分而不是方法的开头,但是有没有办法做到这一点?
我知道,例如,我可以创建一个循环,其中包含我想重复的代码段的副本,我也可以将该方法分解为以下部分:
public static void main(String[] args)
{ //do stuff
methodA();
}
public static void methodA()
{
//do more stuff
methodB();
}
public static void methodB()
{
//do some other stuff
if (answer == 1) methodA(); //return to methodA
else System.exit(0);
}
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的例子(有明显的代码缺失,但只是参考),我是如何进行的,但我希望能够在main中插入某种标签并像方法一样引用它无需将主要方法分解为块.
问题是:有可能吗?或者我可以采取其他方法吗?
另外:如果这在Java中不可用,但是以其他语言提供,那么对这种语言的引用将有助于我查看.
编辑:澄清,我不是专门寻找一个goto()命令所以请不要在你的答案中假设这样.即使可用,我也希望避免使用goto()命令,因为如果我在其上面添加代码,那么任何指向行而不是方法的东西都会破坏.我想象的更像是这样:
public static void main(String[] args)
{ //do stuff
label bookmarkA();
//do more stuff
bookmarkA();
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,这是在宣告我将在以后跳转到哪里然后调用它就像我将调用方法一样.基于下面的答案,我怀疑这样的事情是否具体存在(虽然如果它确实我会喜欢它),但似乎有一些命令在一定范围内在某个范围内向上或向下移动.
一个好的答案可能会告诉我什么是可能的,至少指出我正确使用它的方向.一个好的答案也可能告诉我,如果有更接近我想要的东西也可用另一种语言.
最后,这不是要求goto()命令的问题的重复,因为这不是我想要的.
编辑2:如果关于这个问题的任何事情都不清楚,我不会询问任何具体的方法来做我想做的事情,我也没有指明我想开始执行一个方法,而不是在方法的开头.我要问,具体是什么是可能的.请假设只有一种方法在使用,或者我想要发生的一切都采用相同的方法.
正如我非常清楚地解释的那样,我已经知道如何使用多种方法解决问题,但如果可能的话,我想在同一方法中解决问题.
不,Java不支持这一点.您无法在方法中的任意点开始执行方法.考虑将您的方法分解为更小的方法来实现您的目标.
您基本上要求的是goto引用标签而不是行号,例如在C编程语言中:
C语言中goto语句的语法如下:
Run Code Online (Sandbox Code Playgroud)goto label; .. . label: statement;
- http://www.tutorialspoint.com/cprogramming/c_goto_statement.htm
但是,即使在支持它的C中,使用goto也被广泛认为是一种不好的做法.来自同一链接:
注意:在任何编程语言中都不鼓励使用goto语句,因为它很难跟踪程序的控制流程,使程序难以理解且难以修改.任何使用goto的程序都可以重写,以便它不需要goto.
- http://www.tutorialspoint.com/cprogramming/c_goto_statement.htm
或者,更有名的是看到Edsger Dijkstra 传奇的Go to Consideto harm paper.
Java不支持goto(虽然它是一个保留字).在Java中唯一支持的分支语句break,continue并且return它们整齐地总结了规范java语言教程.