爱程序网

对于System.exit(0)和System.exit(1)的一般理解

来源: 阅读:

public static void exit(int status)
终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。

该方法调用 Runtime 类中的 exit 方法。该方法永远不会正常返回。

调用 System.exit(n) 实际上等效于调用:

 Runtime.getRuntime().exit(n)
参数:
status - 退出状态。 
通过启动虚拟机的关闭序列,终止当前正在运行的 Java 虚拟机。此方法从不正常返回。可以将变量作为一个状态码;根据惯例,非零的状态码表示非正常终止。

虚拟机的关闭序列包含两个阶段。在第一个阶段中,会以某种未指定的顺序启动所有已注册的关闭钩子 (hook)(如果有的话),并且允许它们同时运行直至结束。在第二个阶段中,如果已启用退出终结,则运行所有未调用的终结方法。一旦完成这个阶段,虚拟机就会暂停

如果在虚拟机已开始其关闭序列后才调用此方法,那么若正在运行关闭钩子,则将无限期地阻断此方法。如果已经运行完关闭钩子,并且已启用退出终结 (on-exit finalization),那么此方法将利用给定的状态码(如果状态码是非零值)暂停虚拟机;否则将无限期地阻断虚拟机。

System.exit 方法是调用此方法的一种传统而便捷的方式。  

 参数:status - 终止状态。按照惯例,非零的状态码表明非正常终止。

 1 /**
 2      * Terminates the currently running Java Virtual Machine. The
 3      * argument serves as a status code; by convention, a nonzero status
 4      * code indicates abnormal termination.
 5      * <p>
 6      * This method calls the <code>exit</code> method in class
 7      * <code>Runtime</code>. This method never returns normally.
 8      * <p>
 9      * The call <code>System.exit(n)</code> is effectively equivalent to
10      * the call:
11      * <blockquote><pre>
12      * Runtime.getRuntime().exit(n)
13      * </pre></blockquote>
14      *
15      * @param      status   exit status.
16      * @throws  SecurityException
17      *        if a security manager exists and its <code>checkExit</code>
18      *        method doesn't allow exit with the specified status.
19      * @see        java.lang.Runtime#exit(int)
20      */
21     public static void exit(int status) {
22     Runtime.getRuntime().exit(status);
23     }

例子加强理解:

在一个if-else判断中,如果我们程序是按照我们预想的执行,到最后我们需要停止程序,那么我们使用System.exit(0),而System.exit(1)一般放在catch块中,当捕获到异常,需要停止程序,我们使用System.exit(1)。这个status=1是用来表示这个程序是非正常退出。

 

 

关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助