[英]How to jump in java
我有这样的代码
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
怎么了 ?
在Java中不可能像这样跳跃,唯一的跳跃方式是从循环,while和do。
阅读@Heinzi的答案
2.2.6没有更多的Goto语句
Java没有goto语句 。 研究表明,goto被(误用)的原因不只是“因为它存在”而被更多地使用。 取消goto导致语言的简化-例如,在for语句的中间没有关于goto效果的规则。 对大约100,000行C代码的研究确定,大约90%的goto语句仅用于获得摆脱嵌套循环的效果。 如上所述,多级中断并继续删除了对goto语句的大部分需求。
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++;
的循环开始处继续numPs++;
将不会被处理。
您可以在此处阅读有关此内容的更多信息: 分支语句
continue是Java中的关键字,用于跳过循环的迭代。 如果您试图找到与GOTO等效的产品,则应重新考虑如何解决问题, GOTO永远不是有效的选择。
据我所知,Java中没有goto(有一个关键字,但没有任何意义)
基本上,在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
)使下一条语句不可访问。
另请参见: Java中goto语句的替代方法
但是有一种相当棘手的方法可以使您的代码“起作用”:
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
语句...或通过完全删除第一个“打印”来进行此操作更为简单。
从理论上讲,Java具有Jump语句return
和break
。
return
语句会跳出一个方法,无论是否将值返回给调用语句。
break
语句跳出循环。
正如前面的答案中提到的那样, goto
在Java中不可用,并且不被视为过程式或面向对象编程中的良好编程习惯。 它存在于顺序编程时代。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.