我有这样的代码
public class Test
{
public static void main(String[] args)
{
continue s;
System.out.println("I am not supposed to print this");
s:
System.out.println("I am suppose to print this");
}
}
我收到错误
java: undefined label: s
有什么问题?
答案 0 :(得分:1)
在Java中不可能像这样跳转,只有跳转的方式是来自循环,而且是。
阅读@Heinzi回答
2.2.6没有更多转到语句
Java没有goto语句。研究表明,goto(错误)的使用频率高于“因为它存在”。 消除goto导致语言的简化 - 例如,没有关于goto对for语句中间的影响的规则。对大约100,000行C代码的研究确定,大约90%的goto语句纯粹用于获得打破嵌套循环的效果。如上所述,多级中断并继续删除对goto语句的大部分需求。
The Java Language Environment, James Gosling and Henry McGilton, 1996
答案 1 :(得分:1)
java中没有“goto”。并且“继续”会做一些其他功能。您可以在循环中使用“continue”,例如:
class ContinueDemo {
public static void main(String[] args) {
String searchMe = "peter piper picked a " + "peck of pickled peppers";
int max = searchMe.length();
int numPs = 0;
for (int i = 0; i < max; i++) {
// interested only in p's
if (searchMe.charAt(i) != 'p')
continue;
// process p's
numPs++;
}
System.out.println("Found " + numPs + " p's in the string.");
}
}
在上面的示例中,如果例如searchMe.charAt(5) != 'p'
,则循环将从i = 6的循环开始继续,并且numPs++;
将不会被处理。
您可以在此处详细了解: Branching Statements
答案 2 :(得分:0)
继续是Java中用于跳过循环迭代的关键字。 如果您正在尝试找到等同于 GOTO 的内容,则应重新考虑如何解决您的问题, GOTO永远不是一个有效的选项。< / strong>
答案 3 :(得分:0)
据我所知,Java中没有goto(有关键字,但没有意义)
答案 4 :(得分:0)
基本上,在Java中没有实际的方法可以做到这一点。您似乎试图执行相当于“goto”的操作,而Java中则不支持。 break label
和continue label
语句只能分支到附加标记的语句。
现在根据Java形式语法你可以这样写:
s: {
continue s;
System.out.println("I am not supposed to print this");
}
System.out.println("I am suppose to print this");
但仍然无法编译,原因有两个:
只允许继续分支到循环语句中的标签。 (break
没有那个限制......但是......)
continue
(或break
)使下一个语句无法访问。
另请参阅:Alternative to a goto statement in Java
但是有一种相当棘手的方法让你的代码“工作”:
static final boolean flag = true; // class attribute ...
...
s: {
if (flag) break s;
System.out.println("I am not supposed to print this");
}
System.out.println("I am suppose to print this");
编译器将对“测试”进行评估,以使break
实际上是无条件的。但是JLS表示第一个println
将视为可以访问,因此您将无法获得无法访问的代码错误。
如果您生成此源代码,我想这可能非常有用。除此之外,它(IMO)只是一种好奇心。使用常规if
/ else
语句或通过完全删除第一个“打印”来执行此操作会更简单。
答案 5 :(得分:0)
理论上,Java有Jump语句return
和break
。
return
语句跳出一个方法,有或没有返回值到调用语句。
break
语句跳出循环。
如前面的答案所述,goto
在Java中不可用,并且在程序或面向对象编程中不被认为是一种很好的编程实践。它存在于顺序编程的时代。