以编程方式退出应用程序的适当方法是什么?

我正在评估用户输入作为我的应用程序的命令。 如果用户按下Qq ,然后按Enter键,则应用程序退出并执行终止。

是否有适当的背景或最佳实践如何做到这一点? 我没有任何资源可以发布,或类似的东西。 我应该只使用System.exit(0); ? 有推荐的方法吗?

作为我的第一个方法,我做了这样的事情:

 while (true){ try{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //Other logic goes here... if (br.readLine().equalsIgnoreCase("Q")){ System.exit(0); } } catch (IOException ioe) { System.out.println("IO error trying to read your selection"); } } 

你也可以回到main()并从那里返回。

  private void loop() { while (true){ try{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //other logic goes here... if(br.readLine().equalsIgnoreCase("Q")){ return; // You're done and you are returning to the caller. } } catch (IOException ioe) { System.out.println("IO error trying to read your selection"); } } } public static void main(String[] args) { loop(); } 

但是如果你没有任何东西要发布, System.exit(0)就可以了。

当进程退出时,操作系统会自动清理资源。 不仅仅是从代码中间退出()这有两个主要原因(这适用于所有语言)。

  • 在程序结束之前可能需要采取一些措施。 例如,您可能需要保存任何打开的文件(即出于性能或其他原因尚未发送到文件的写入更改)。

  • 有人可能希望稍后将您的代码用于其他目的。

以Git版本控制系统为例。 有几种努力将代码转换为库而不是一组独立的可执行文件,以便可以有效地将其合并到其他项目中。 其中一个问题(从我听到的)是代码有时只是终止而不是跟踪和清理它正在使用的资源。 作为一个可执行文件,但如果它作为库导入,您并不总是想要终止主机应用程序,因为您已经完成了一小部分。

当然, 返回到 main()返回是最干净的方式,但如果这不容易, System.exit()完全没问题。

它与您的问题没有直接关系,但抛出(未处理的)exception通常是终止致命条件的方式 ,因为它为穷人提供了大量的跟踪信息。

我想说:

没关系,这完全取决于你!

它有时是真的,有时它取决于程序结构和代码完整性。

合理的退出将通过main方法,终止所有线程。

System.exit强制终止JVM中的所有线程。 System.exit永远不会正常返回。 它应该用于错误。

System.exit()很好。 我同意其他答案,从维护的角度来看,返回main将是退出的最佳方式。 随着代码的扩展,您可能会忘记System.exit必须调试以记住它的小方法。

但是,如果您的脚本需要有关exception终止的信息,则只需使用exit。 否则没有必要。

我记得Java程序默认会以0退出 – 意味着正常终止。 因此,如果由于某些错误导致程序终止,则需要使用System.exit(n)。

示例(仅使用您最有可能想要实例化的静态方法…):

 public static void main(String[] args) { try { doStuff(); } catch (SomeRuntimeException e) { // marching orders! Exit with errorcode  System.exit(1); } } private static doStuff() { // doing my thing ... ... //then some error occurs and I have no other choice but to do a hard exit throw new SomeRuntimeException( ... some info would be nice ...) ... return } 

不要忘记,如果执行System.exit() ,以后就不能轻易地在独立库中使用您的方法。 如果您想在现有解决方案之外重用您的代码(现在可能没有,但将来决定这样做),那么您必须适当地重新访问和重构。

否则,最糟糕的情况是您在System.exit()的情况下获取现有代码,使用它然后让您的库意外退出新应用程序。

请记住一些事情。 代码重用。