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

Java  2020年7月3日 pm12:51发布4年前 (2020)更新 91es.com站长
70 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、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

林清玄:把时间花在心灵上

朋友带我去看一位收藏家的收藏,据说他收藏的都是顶级的东西,随便拿一件来都是价逾千万。我们穿过一条条的巷子,来到一家不起眼的公寓前面,我心中正自纳闷,顶级的古董怎么会收藏在这种地方呢?收藏家来开门了,连续打开三扇不锈钢门,才走进屋内。室内的灯光非常幽暗,等了几秒钟,我才适应了室内的光线,这时,才赫...

WordPress博客搬家教程

这是建站的必备知识,我们需要怎么进行网络搬家,如果你不会,请仔细研读。这一篇文章写得最简单最明白的。第一步:备份网站根目录下所有文件并转移到新主机。这一步主要是把原来的空间中的网站程序、图片等资源下载备份,并上传到新的主机空间。如果原来空间支持在线压缩,并且新的空间支持解压缩,那么建议...

NDK中jni.h头文件完整内容

前言这里摘抄一下jni.h头文件中的所有内容,主要是方便自己查阅。涉及的文件android-ndk-r21d-windows-x86_64\android-ndk-r21d\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include...

吴念真:饱了别人,瘦了自己

当我们第一眼看到阿婆的自助餐厅时,还以为自己找错了地方呢!以为自己走入了一个工地的厨房,一个受雇的欧巴桑正准备免费的午餐,等待忙了一个早上的工人,让他们填饱肚子。话说回来,这样的印象跟事实其实相去不远。经营这家没有招牌的自助餐厅的阿婆庄朱玉女士,唯一的经营哲学就是让你吃到饱!今年七十六岁的她,从早...

Android MediaButton监听再次记录

前言再次记录一下Android 中MediaButton的注册,注销代码片段,以及遇到的问题,记录于此,方便自己查阅和回顾。正文一般会出现监听了,但是没收到。下面记录一下自己处理的方式。隐藏内容!付费阅读后才能查看!¥4 ¥5多个隐藏块只需支付一次付费阅读参考文章老文章了,但还是这里重...

郑愁予 : 错误

我打江南走过那等在季节里的容颜如莲花的开落东风不来,三月的柳絮不飞 你底心如小小的寂寞的城恰若青石的街道向晚跫音不响,三月的春帷不揭 你底心是小小的窗扉紧掩我达达的马蹄是美丽的错误我不是归人,是个过客……