[摘]System.exit(0)和System.exit(1)区别

Java  2020年7月3日 pm12:51发布4年前 (2020)更新 城堡大人
106 0 0

原作者解释得很清晰明,因此摘抄于此。

关于System.exit(status)

System.exit(status)源码说明如下:

System.java
/**
 * Terminates the currently running Java Virtual Machine. The
 * argument serves as a status code; by convention, a nonzero status
 * code indicates abnormal termination.
 */
public static void exit(int status) {
    Runtime.getRuntime().exit(status);
}
Runtime.java
    /**
     * Terminates the currently running Java virtual machine by initiating its
     * shutdown sequence.  This method never returns normally.  The argument
     * serves as a status code; by convention, a nonzero status code indicates
     * abnormal termination.
     * /
    public void exit(int status) {
        // Make sure we don't try this several times
        synchronized(this) {
            if (!shuttingDown) {
                shuttingDown = true;

                Thread[] hooks;
                synchronized (shutdownHooks) {
                    // create a copy of the hooks
                    hooks = new Thread[shutdownHooks.size()];
                    shutdownHooks.toArray(hooks);
                }

                // Start all shutdown hooks concurrently
                for (Thread hook : hooks) {
                    hook.start();
                }

                // Wait for all shutdown hooks to finish
                for (Thread hook : hooks) {
                    try {
                        hook.join();
                    } catch (InterruptedException ex) {
                        // Ignore, since we are at VM shutdown.
                    }
                }

                // Ensure finalization on exit, if requested
                if (finalizeOnExit) {
                    runFinalization();
                }

                // Get out of here finally...
                nativeExit(status);
            }
        }
    }

注释中说的很清楚,这个方法是用来结束当前正在运行中的java虚拟机。

如何status是非零参数,那么表示是非正常退出。

  1. System.exit(0)是将你的整个虚拟机里的内容都停掉了 ,而dispose()只是关闭这个窗口,但是并没有停止整个application exit() 。无论如何,内存都释放了!也就是说连JVM都关闭了,内存里根本不可能还有什么东西
  2. System.exit(0)是正常退出程序,而System.exit(1)或者说非0表示非正常退出程序
  3. System.exit(status)不管status为何值都会退出程序。和return 相比有以下不同点:return是回到上一层,而System.exit(status)是回到最上层

举例说明

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

摘抄来源

  1. System.exit(0)和System.exit(1)区别

 历史上的今天

  1. 2023: JNI动态注册封装C语言版(0条评论)
  2. 2021: 西蒙·阿米德奇 :黄昏(0条评论)
  3. 2019: 刘继荣:不想当英雄,只想做那个坐在路边为英雄鼓掌的人(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

歌德:野蔷薇

少年看到一朵蔷薇,荒野的小蔷薇,那样的娇嫩可爱而鲜艳,急急忙忙走向前,看得非常欢喜。蔷薇,蔷薇,红蔷薇,荒野的小蔷薇。 少年说:“我要来采你,荒野的小蔷薇!”蔷薇说:“我要刺你,让你用不会忘记。我不愿被你采折。”蔷薇,蔷薇,红蔷薇,荒野的小蔷薇。 ...

余光中:等你 在雨中

等你 在雨中 在造虹的雨中蝉声沉落 蛙声升起一池的红莲如红焰 在雨中 你来不来都一样 竟感觉每朵莲都像你尤其隔著黄昏 隔著这样的细雨 永恒 刹那 刹那 永恒等你 在时间之外在时间之内 等你 在刹那 在永恒 如果你的手在我的手里 此刻如果你的清芬...

王朔:上一秒痛苦,下一秒无聊

每天晚上我都睡得很晚,不是不困,而是不想睡,强迫自己不要睡。我似乎得了强迫症,我很忧郁。因为我总觉得一天什么都没干就这么过去了,实在不甘心!于是我就尽量延长这一天的时间。我真是个有志气的人,我很欣慰。志气是有了,可是找不到有志气的事情干,我很忧郁。幸好还有个电视,最妙的是还有个遥控器。遥控器真...

C语言之链接属性

前言对于C语言的链接属性,比较模糊,因此今天回归一下课本上的知识,并记录一下,方便自己回顾。正文链接属性链接属性用于认定不同文件的标识符(比如变量名、函数名)是否是同一个实体。通俗地说,就是在两个不同文件中的变量、函数声明是否指向同一个实体。比如:a、b文件同时声明了变量c,链接属性就指...

currentTimeMillis()与uptimeMillis()区别

前言项目中,由于需要做防爆力点击,需要计算用户点击的时间间隔。虽然也经常使用,但偶尔还是忘了该用哪个,以及这两个之间的区别,因此,抽空整理一下,摘抄于此。Android中计算时间间隔的方法记录开始时间 startTime,然后每次回调时,获取当前时间 currentTime,计算差值 = ...

胡适:赠与今年的大学毕业生

这一两个星期里,各地的大学都有毕业的班次,都有很多的毕业生离开学校去开始他们的成人事业。学生的生活是一种享有特殊优待的生活,不妨幼稚一点,不妨吵吵闹闹,社会都能纵容他们,不肯严格的要他们负行为的责任。现在他们要撑起自己的肩膀来挑他们自己的担子了。在这个国难最紧急的年头,他们的担子真不轻! 我们祝他们...