在我构建的游戏中,用户可以通过按下一个数字来选择一些选项。然后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;
}
答案 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}可能是必需的。)
[
break
]终止当前运行的Java虚拟机。该参数用作状态代码;按照惯例,非零状态代码表示异常终止。此方法调用类System.exit()
中的exit
方法。 此方法永远不会正常返回。通话
Runtime
实际上等同于通话:System.exit(n)
我不太喜欢'通常'。 Runtime.getRuntime().exit(n)
具有相同的“正常”。我怀疑这是他们可以抛出异常这一事实的参考,在这种情况下,缺少Runtime.exit
不是问题。 Jon Skeet似乎并不关心here。
也就是说,阻止将break
语句放在那里是没有的。事实上,这可能是一个很好的计划,以防有人在之后添加另一个项目,然后其他人交换break
以获取可能返回的内容,例如打电话给'你确定要退出'吗?