System.exit()和dispose()的区别
程序员文章站
2022-07-13 23:19:13
...
先放上 System.exit(status)的源码
* @param status
* Termination status. By convention, a nonzero status code
* indicates abnormal termination.
*
* @throws SecurityException
* If a security manager is present and its
* {@link SecurityManager#checkExit checkExit} method does not permit
* exiting with the specified status
*
* @see java.lang.SecurityException
* @see java.lang.SecurityManager#checkExit(int)
* @see #addShutdownHook
* @see #removeShutdownHook
* @see #halt(int)
*/
public void exit(int status) {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkExit(status);
}
Shutdown.exit(status);
}
由源码可见
System.exit()停止虚拟机
而dispose()只是关闭这个窗口,但是并没有停止整个application。
exit方法会释放内存,也就是说连JVM都关闭了
注意
System.exit(status)不管status为何值都会退出程序。
System.exit(0)是正常退出程序,而System.exit(1)或者说非0表示非正常退出程序
System.exit(status)和return 相比有以下不同点:
return是回到上一层,而System.exit(status)是回到最上层
在一个if-else判断中,如果我们程序是按照我们预想的执行,到最后我们需要停止程序,那么我们使用System.exit(0),
而System.exit(1)一般放在catch块中,当捕获到异常,需要停止程序,我们使用System.exit(1)。这个status=1是用来表示这个程序是非正常退出
。