如果java应用程序停止工作,请将其关闭

如果java应用程序停止工作,请将其关闭,java,Java,如果出现错误,是否有方法关闭java应用程序?e、 g.如果我有一个nullpointerexception,我可以将其完全关闭吗?您可以使用系统退出(0)终止JVM 但是,您应该通过在使用引用之前检查引用来避免NullPointerException: if(foo != null) foo.doSomething(); 您可以使用System.exit(0)终止JVM 但是,您应该通过在使用引用之前检查引用来避免NullPointerException: if(foo != null) f

如果出现错误,是否有方法关闭java应用程序?e、 g.如果我有一个nullpointerexception,我可以将其完全关闭吗?

您可以使用
系统退出(0)
终止JVM

但是,您应该通过在使用引用之前检查引用来避免
NullPointerException

if(foo != null) foo.doSomething();

您可以使用
System.exit(0)
终止JVM

但是,您应该通过在使用引用之前检查引用来避免
NullPointerException

if(foo != null) foo.doSomething();

顶层的任何未捕获异常都将自动停止它所在的线程。如果程序中有多个线程,那么其他线程仍将继续存在。如果要显式终止,可以调用
System.exit()

顶级的任何未捕获异常都将自动停止它所在的线程。如果程序中有多个线程,那么其他线程仍将继续存在。如果要显式终止,可以调用
System.exit()

,正如其他人所说,捕获异常并调用
System.exit()
通常是正确的方法。但还有比这更重要的事情:

问:我真的需要抓住它吗

答:如果您的应用程序是传统的命令行应用程序,并且异常是在“主”线程上抛出的,那么您可能不需要捕获它。主线程上未捕获的异常将导致应用程序退出。。。如果不存在其他非守护进程线程。(事实上,任何线程都是如此……)

但是,如果您的线程有多个非守护进程线程,则需要采取措施停止应用程序。如捕获异常并调用
exit()

问:你在哪里钓到的

答:在任何可能引发“致命”异常的线程堆栈上。有两种方法可以做到这一点:

  • main(String[])
    方法、线程的
    run()
    方法等中放置一个try/catch(Throwable)

  • 安装默认的未捕获异常处理程序

您不想做的是在整个代码库中添加
System.exit()
调用。这种方法导致了各种各样的问题,包括可重用性、单元测试,以及“为什么高效的应用程序又死掉了”

问:如果它已经被捕获了怎么办

答:应用程序可能无法自然退出的一个原因是,您的代码已经捕获到异常。。。偶然地例如:

    try {
       doSomething()
    } catch (Exception ex) {
       handle an IO exception
    }

以上,一些无知/懒惰的程序员并没有费心考虑在代码> > DOWOMENT/<代码>中抛出的异常,并假定它们都是某种与IO相关的异常。但是如果异常实际上是意外的

NullPointerException
。。。或者更糟的事。。。然后代码就把它压扁了


解决这类问题的方法是代码审查和指导,以纠正程序员的坏习惯。。。希望在他对代码库造成太多破坏之前!如果你在你的代码库中发现了这种情况,你应该立即修复它。。。也可能是“grep”来修复类似的事件。

正如其他人所说,捕获异常并调用
System.exit()
通常是正确的方法。但还有比这更重要的事情:

问:我真的需要抓住它吗

答:如果您的应用程序是传统的命令行应用程序,并且异常是在“主”线程上抛出的,那么您可能不需要捕获它。主线程上未捕获的异常将导致应用程序退出。。。如果不存在其他非守护进程线程。(事实上,任何线程都是如此……)

但是,如果您的线程有多个非守护进程线程,则需要采取措施停止应用程序。如捕获异常并调用
exit()

问:你在哪里钓到的

答:在任何可能引发“致命”异常的线程堆栈上。有两种方法可以做到这一点:

  • main(String[])
    方法、线程的
    run()
    方法等中放置一个try/catch(Throwable)

  • 安装默认的未捕获异常处理程序

您不想做的是在整个代码库中添加
System.exit()
调用。这种方法导致了各种各样的问题,包括可重用性、单元测试,以及“为什么高效的应用程序又死掉了”

问:如果它已经被捕获了怎么办

答:应用程序可能无法自然退出的一个原因是,您的代码已经捕获到异常。。。偶然地例如:

    try {
       doSomething()
    } catch (Exception ex) {
       handle an IO exception
    }

以上,一些无知/懒惰的程序员并没有费心考虑在代码> > DOWOMENT/<代码>中抛出的异常,并假定它们都是某种与IO相关的异常。但是如果异常实际上是意外的

NullPointerException
。。。或者更糟的事。。。然后代码就把它压扁了


解决这类问题的方法是代码审查和指导,以纠正程序员的坏习惯。。。希望在他对代码库造成太多破坏之前!如果你在你的代码库中发现了这种情况,你应该立即修复它。。。也可能是“grep”来修复类似的事件。

建议“you should”应该改为“you can”。盲目地做出这样的更改实际上可能会使真正的问题变得更糟/更难发现。请注意,退出时通常会使用非零代码(如System.exit(1)),以表明退出是某个问题的结果,而不是虚拟机无事故地到达程序末尾。建议“您应该”如下所示“你可以”。盲目地做出这样的改变实际上可能会