如何跳转到java

时间:2014-01-19 14:58:49

标签: 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

有什么问题?

6 个答案:

答案 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 labelcontinue 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语句returnbreak

return语句跳出一个方法,有或没有返回值到调用语句。

break语句跳出循环。

如前面的答案所述,goto在Java中不可用,并且在程序或面向对象编程中不被认为是一种很好的编程实践。它存在于顺序编程的时代。