`

详谈java中System.exit(0)和System.exit(1)的本质区别

    博客分类:
  • Java
阅读更多

 

1.解析

查看java.lang.System的源代码,我们可以找到System.exit(status)这个方法的说明,代码如下:

  /**
     * Terminates the currently running Java Virtual Machine. The
     * argument serves as a status code; by convention, a nonzero status
     * code indicates abnormal termination.
     * <p>
     * This method calls the <code>exit</code> method in class
     * <code>Runtime</code>. This method never returns normally.
     * <p>
     * The call <code>System.exit(n)</code> is effectively equivalent to
     * the call:
     * <blockquote><pre>
     * Runtime.getRuntime().exit(n)
     * </pre></blockquote>
     *
     * @param      status   exit status.
     * @throws  SecurityException
     *        if a security manager exists and its <code>checkExit</code>
     *        method doesn't allow exit with the specified status.
     * @see        java.lang.Runtime#exit(int)
     */
    public static void exit(int status) {
	Runtime.getRuntime().exit(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)是回到最上层

2.示例

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

 

分享到:
评论

相关推荐

    详谈Java中net.sf.json包关于JSON与对象互转的坑

    在Java中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript语言的特定语法,但其实它并不局限于JavaScript,而是独立于语言和平台的。JSON在Web开发中广泛用作前后端数据交换的...

    详谈Java中instanceof和isInstance的区别

    在Java编程语言中,`instanceof` 和 `Class.isInstance()` 都是用来判断对象是否属于特定类型的工具,但它们之间存在一些微妙的区别。下面将详细解释这两种操作符的用法和差异。 首先,`instanceof` 关键字是Java...

    详谈java中boolean和Boolean的区别

    Java 中 boolean 和 Boolean 的区别详解 作为一名 Java 开发者,了解 boolean 和 Boolean 的区别是非常重要的。本文将详细介绍 Java 中 boolean 和 Boolean 的区别,帮助读者更好地理解和使用这两种数据类型。 ...

    详谈Java泛型中T和问号(通配符)的区别

    Java泛型中T和问号(通配符)的区别 Java泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、...

    详谈如何开展危机公关.pptx

    详谈如何开展危机公关.pptx

    详谈Java静态动态的问题

    在Java中,静态和动态是两个非常重要的概念,它们在Java开发中扮演着非常关键的角色。静态是指在类加载时就已经存在的成员变量或方法,而动态是指在实例化对象后才存在的成员变量或方法。下面我们将详细地讨论Java中...

    详谈视频编码之H.264、H.265、AV1.docx

    在当今社会,视频已成为人们日常生活中不可或缺的一部分。无论是在线观看电视剧、短视频分享,还是远程教育与工作协作,视频的应用场景日益广泛。然而,随着用户对视频质量要求的不断提高,如何在保证画质的同时优化...

    详谈Java多线程的几个常用关键字

    下面是一个简单的示例代码,演示了同步和异步的区别: ```java public class SynAndAsynDemo { public static void main(String[] args) { final SynAndAsynDemo mo = new SynAndAsynDemo(); Thread t1 = new ...

    详谈Java中的二进制及基本的位运算

    Java 中的二进制是计算技术中广泛采用的数制,使用 0 和 1 两个数码来表示数。Java 中的二进制数据主要是以补码的形式存储的。计算机中的二进制是一个非常微小的开关,用“开”来表示 1,“关”来表示 0。 Java ...

    详谈jvm--Java中init和clinit的区别

    JVM 中 init 和 clinit 的区别详解 Java 虚拟机(JVM)是 Java 语言的核心组件之一,负责将 Java 字节码转换为机器码并执行。其中,init 和 clinit 是两个重要的概念,它们分别是实例构造器和类构造器,在 Java ...

    详谈锁和监视器之间的区别_Java并发

    本文将详细讨论锁和监视器之间的区别,并阐述它们在Java并发编程中的应用。 锁(lock)是一种同步机制,它可以保护代码片段,使得在任何时刻只能有一个线程执行被保护的代码。锁可以管理试图进入被保护代码的线程,...

    详谈Java几种线程池类型介绍及使用方法

    Java 中的线程池是一种高效的并发编程机制,它可以将任务提交给线程池,并由线程池中的线程执行任务, Java 提供了四种线程池类型,分别是 newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool 和 ...

    详谈SCSI硬盘.doc

    SCSI (Small Computer System Interface) 是一种专门设计用于小型计算机系统的接口模式,起源于1979年,由施加特公司(希捷的前身)研发,并在1986年成为美国标准协会(ANSI)认可的标准。SCSI的核心优势在于其作为...

    详谈Java中的Object、T(泛型)、?区别

    是 Java 中三个重要的概念,它们之间的区别和联系是 Java 开发者需要了解和掌握的。下面,我们将详细介绍这三个概念的区别和联系。 Object 是 Java 中的根类,所有 Java 类都继承自 Object 类。因此,Object 类的...

    详谈如何开展危机公关.rar

    "详谈如何开展危机公关"这个主题,涉及到的是企业在面对突发性问题时,如何有效地管理和控制公众舆论,保护品牌形象,并最大限度地减少损失。 危机公关主要涉及以下几个核心知识点: 1. **危机预警机制**:建立...

    我大学详谈大学学习及高中学习差别.docx

    大学学习与高中学习在多个方面存在显著的差异,这些差异不仅体现在学习环境上,还在于学习模式、目标、内容和动力等方面。 首先,从学习性质来看,高中阶段主要是基础知识的积累,为的是通过高考这一重要的选拔考试...

    详谈java集合框架

    Java集合框架是Java语言中用于存储和操作对象集合的框架,它提供了一套性能优良、使用方便的接口和类,位于java.util包中。Java集合框架主要包含Collection接口、List接口、Set接口和Map接口四个主要部分。 ...

    一文详谈架构设计.docx

    1. 系统与子系统: - 系统是由相互关联的个体组成的,它们按照特定规则协同工作,共同创造出个体无法单独实现的功能。系统具有关联性、规则性和独特的能力。 - 子系统是系统的一个组成部分,它在更大的系统中扮演...

    详谈Java枚举、静态导入、自动拆装箱、增强for循环、可变参数

    "Java枚举、静态导入、自动拆装箱、增强for循环、可变参数详解" 一、枚举简介 枚举是一种特殊的类型,可以限定一个变量的取值范围,使其只能是固定的几个值。枚举的优点是可以使代码更加简洁、可读性强、提高安全...

Global site tag (gtag.js) - Google Analytics