当前位置: 首页 > 面试题库 >

为什么在System.exit(0)之后仍需要返回?

史昱
2023-03-14
问题内容

考虑一下这个功能:

public boolean foo(){
   System.exit(1);
   //The lines beyond this will not be read
   int bar = 1;                  //L1
   //But the return statement is required for syntactically correct code
   return false;                 //L2

   //error here for unreachable code
   //int unreachable = 3;        //L3

}

有人可以解释一下为什么L1和L2显然无法到达时没有给出警告,而L3却给出了警告。


问题答案:

因为就编译器而言,System.exit()这只是另一个方法调用。

它所做的是结束过程这一事实只能从实现中找到(这是本机代码,而没有任何区别)。

如果你必须把System.exit()你的代码(通常也最好避免它,除非你想返回0以外的代码),它应该是一个方法,返回voidmain()例如。这样更好。

关于可达性,解释是相同的:return是Java语言的关键字,因此IDE使用的编译器或解析器可以告诉您,从理论上讲,return语句执行后,理论上是不可能的。这些规则在这里定义



 类似资料:
  • 答案:这个线程的顶部答案基本上回答了我的问题:在一个非void方法编译中缺少return语句。 我想知道为什么不需要在这个方法中返回一个值? 我觉得这样不应该编译。然而,它编译得很好。这在哪里被定义为合法? 在这种情况下,将方法更改为:

  • 问题内容: 在装有NVidia GeForce 820M的Windows 10 PC上,我成功安装了CUDA 9.2和cudnn 7.1,然后按照pytorch.org上的说明安装了PyTorch。 具体来说我使用了命令 因为我使用点子而不是Anaconda。 然而我得到以下 为什么会这样呢? 问题答案: 您的图形卡不支持CUDA 9.0。 由于我已经看到很多涉及此类问题的问题,因此我就如何检查您

  • 我知道(-0==0)是真的。我很想知道为什么-0 当我在stackoverflow执行上下文中运行这段代码时,它返回。 但是当我在浏览器控制台中运行相同的代码时,它返回。那是为什么呢?我试图在谷歌上搜索它,但没有找到任何有用的东西。这个问题可能不会给某个人的实际例子增加价值,我想了解JS是如何计算它的。

  • 根据Spring Doc API http://docs.Spring.io/Spring-framework/docs/current/javadoc-api/index.html?org/springframework/web/context/contextloaderlistener.html- 这个(ContextLoaderListener)监听器应该注册在web.xml中的Log4jC

  • 问题内容: 在Python 2.6中查看Queue.py时,我发现这个结构有点奇怪: 如果maxsize为0,则队列永远不会满。 我的问题是在这种情况下如何运作?如何0 < 0 == 0被认为是错误的? 问题答案: 我相信Python对关系运算符的序列有特殊的处理方式,以使范围比较易于表达。能说比说好得多。 这些称为链接比较。这是他们文档的链接。 在您谈论的其他情况下,括号会强制在一个关系运算符之

  • 问题内容: 我有这样的事情: 而且我总是得到“时钟周期为:0-0”的输出 知道为什么会这样吗? (仅给出一点点细节,something_else()函数使用蒙哥马利表示法执行从左到右的求幂运算,而且我不确定不确定something_else()函数确实花费了一些不可忽略的时间。) 这是在Linux上。uname -a的结果是: 问题答案: 该功能不测量CPU时钟周期。 C说: “ 从实现定义的仅与