如何在java中跳转

如何在java中跳转,java,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"); } } 我得到了错误 jav

我有这样的代码

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

怎么了?

continue是Java中用于跳过循环迭代的关键字。
如果你想找到一个等价于GOTO的方法,你应该重新考虑你是如何解决你的问题的,GOTO从来都不是一个有效的选择。

据我所知,Java中没有GOTO(有一个关键字,但没有任何意义)

像这样跳跃在Java中是不可能的,跳转的唯一方法是从循环中跳转,而不是跳转

阅读答案

2.2.6不再有Goto语句

Java没有goto语句。研究表明,goto被(错误地)使用的频率比“因为它就在那里”要高消除goto导致语言简化——例如,对于for语句中间的goto效果没有任何规则。对大约100000行C代码的研究确定,大约90%的goto语句纯粹用于获得打破嵌套循环的效果。如上所述,多级break和continue消除了对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.");
    }
}
class ContinueDemo{
公共静态void main(字符串[]args){
String searchMe=“彼得·派珀挑选了一“+”啄腌辣椒”;
int max=searchMe.length();
int numPs=0;
对于(int i=0;i
在上面的示例中,如果例如
searchMe.charAt(5)!='p'
然后循环将从i=6的循环开始继续,并且
numPs++将不被处理

您可以在此处阅读更多关于此的信息:

基本上,在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");
但这仍然无法编译,原因有二:

  • continue只允许分支到循环语句上的标签。(A
    break
    没有该限制…但是…)

  • continue
    (或
    break
    )使下一条语句无法访问

另见:


但有一种相当棘手的方法可以让代码“工作”:

编译器将对那里的“测试”进行评估,以便
中断
实际上是无条件的。但是JLS说第一个
println
将被视为可访问的,这样您就不会出现无法访问的代码错误


如果您正在生成此源代码,我想这可能很有用。除此之外,这只是一个好奇心。使用常规的
if
/
else
语句执行此操作更简单。。。或者完全删除第一个“print”。

理论上,Java有跳跃语句
return
break

return
语句跳出方法,无论是否向调用语句返回值

break
语句跳出循环


正如前面的回答中提到的,
goto
在Java中不可用,在过程式或面向对象编程中被认为不是一种好的编程实践。它早在顺序编程时代就存在了。

Java不支持
GOTO
(以及类似的功能)。坦率地说,我认为
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");