Java 如果我的程序在执行失败时以状态1退出,那么如果执行成功,我是否还必须包含状态为0的退出?

Java 如果我的程序在执行失败时以状态1退出,那么如果执行成功,我是否还必须包含状态为0的退出?,java,error-handling,exit,Java,Error Handling,Exit,我正在用Java编写一个程序,我需要确保我有正确的错误处理,也就是说,我需要遵循Java的标准约定,让程序以成功或不成功的状态退出 每当我“捕获”程序中的错误时,我都会包含一个系统。退出(1)。现在我想知道我是否也需要在我的程序中提供一个系统。退出(0)?在这种情况下,我在程序中的什么位置添加状态为1的出口 谢谢。是和否 VM将在3种情况下关闭: 操作系统告诉它这样做;在posix术语中,因为它接收一个SITERM信号。如果在前台有jvm的终端中按CTRL+C,这就是工作原理。如果打开windo

我正在用Java编写一个程序,我需要确保我有正确的错误处理,也就是说,我需要遵循Java的标准约定,让程序以成功或不成功的状态退出

每当我“捕获”程序中的错误时,我都会包含一个
系统。退出(1)
。现在我想知道我是否也需要在我的程序中提供一个
系统。退出(0)
?在这种情况下,我在程序中的什么位置添加状态为1的出口

谢谢。

是和否

VM将在3种情况下关闭:

  • 操作系统告诉它这样做;在posix术语中,因为它接收一个SITERM信号。如果在前台有jvm的终端中按CTRL+C,这就是工作原理。如果打开windows“任务管理器”应用程序,单击它,然后点击“结束进程”,就会发生这种情况。如果在终端中键入
    kill-pidOfJavaProcess
    ,就会发生这种情况。当SIGKILLing通常无趣时,进程返回代码;通常是143(128+信号的int值),它询问的是你已经知道的信息:是的,它退出是因为你告诉它。你已经知道了

  • 您可以使用
    System.exit
    命令它退出。是,按照惯例,返回0表示“成功”,否则返回非零

  • VM正在运行的所有线程要么已死亡,要么已设置其守护进程标志(使用
    thread.setDaemon(true)
    )。在这种情况下,VM决定无事可做并退出,错误代码为0

  • 当然,如果您强制杀死它(SIGKILL),那么它也会结束,但它不会运行关机挂钩,您在java应用程序中无法阻止它。当然,错误代码是128+SIGKILL,这同样是无趣的

    由于规则#3,您不需要编写
    System.exit(0)
    。但是,由于“让我们只等待所有线程退出”的模式往往会导致应用程序挂起,并且如果没有关机处理程序,“正确清理”无法完成(因为系统用户可以CTRL+C您的应用程序或将其杀死),您应该运行
    system.exit(0)
    以减少代码必须处理的路由


    那么,你一定要吗?不,你应该吗?是-因为这是一个好主意。

    如果您希望程序在某一点立即退出,请选择“是”。如果只是让程序正常完成,jvm将为您返回0。