在System.exit(0)之后是否还需要中断?

时间:2015-12-12 09:35:14

标签: java switch-statement exit

在我构建的游戏中,用户可以通过按下一个数字来选择一些选项。然后switch语句运行相关方法。其中一个选项是退出游戏,我通过运行System.exit(0)来完成游戏。我想知道,如果退出后的休息仍然有用,如果是这样,为什么?如果exit是switch语句中的最后一个选项,是否存在差异?

代码如下:

switch(choice) {
    case 1: getEntityOverview();
        break;
    case 2: worldMap.PrintMap();
        break;
    case 3: moveAllOnInput();
        break;
    case 4:
        System.out.println("You are exiting the game, "
            + "thanks for playing!");
        System.exit(0);
        break;
}

2 个答案:

答案 0 :(得分:1)

不,您不需要此break声明。

来自班级System的javadoc:

  

public static void exit(int status)   终止当前正在运行的   Java虚拟机。

这将结束您的应用程序的执行,您的程序退出,并且不会执行进一步的指令,除非您注册了Shutdown Hook

即使finally块也不会被执行。

因此,您放置case的{​​{1}}位置无效。

答案 1 :(得分:0)

break可防止“堕落”到下一个case项目。此处不需要break有两个原因:

  • 有问题的选项是switch声明中的最后一项,因此没有任何内容可以落实到
  • 即使下面还有另一个项目,它仍然永远不会“通过”,因为System.exit()没有返回,因为它终止了应用程序(+/-各种钩子)

也许问题意味着'确实System.exit()会返回吗?'(在这种情况下,如果它不是switch语句中的最后一项,则为{{1}可能是必需的。)

根据documentation

  

[break]终止当前运行的Java虚拟机。该参数用作状态代码;按照惯例,非零状态代码表示异常终止。此方法调用类System.exit()中的exit方法。 此方法永远不会正常返回

     

通话Runtime实际上等同于通话:System.exit(n)

我不太喜欢'通常'。 Runtime.getRuntime().exit(n)具有相同的“正常”。我怀疑这是他们可以抛出异常这一事实的参考,在这种情况下,缺少Runtime.exit不是问题。 Jon Skeet似乎并不关心here

也就是说,阻止break语句放在那里是没有的。事实上,这可能是一个很好的计划,以防有人在之后添加另一个项目,然后其他人交换break以获取可能返回的内容,例如打电话给'你确定要退出'吗?