使用System.exit()在同一类中调用另一个方法

3

有什么理由要避免像下面示例代码中那样调用System.exit()中的方法吗?

public class RBS {

    int processClients() {
        ...
        return 0;
    }

    public static void main(String[] args) {
        RBS myBank = new RBS("Royal Bank of Scotland");
        System.exit(myBank.processClients());
    }
}

10
你并没有在System.exit中调用processClients函数。你是先调用了processClients函数,然后将其返回值作为参数传递给System.exit函数。这两个操作是完全独立的。 - Jon Skeet
6个回答

3

System.exit()需要小心使用。终止程序的正常方法是终止所有用户线程。

适用于System.exit()的情况:

  • 实用脚本
  • GUI应用程序,在其中事件分派用户线程在后台创建。

System.exit()方法强制终止Java虚拟机中的所有线程。这是极端的... System.exit()应该保留为灾难性错误退出,或者对于作为命令脚本中实用程序使用的程序可能依赖于程序的退出代码的情况。

您可以按以下方式调用此静态方法:

System.exit(int status);

其中 status - 退出状态。

例如,如果 status = 1,则会得到以下结果:

enter image description here


这个回答包含了一些有意义的内容,但却完全回避了问题。 - vidstige

3

java.lang.System.exit() 方法终止当前运行的 Java 虚拟机。

java.lang.System.exit() 方法的声明

public static void exit(int status)//Should be an int value. 

其中 status -- 这是退出状态。

在这里,您正在使用方法的值,即myBank.processClients()。因此,退出值是上述方法的返回值0

更多信息请参见


2

正如Jon所说,你没有在System.exit中调用processClients。该函数运行后,返回的值将作为退出代码传递给System.exit

至于避免这种情况,只要确保函数始终返回所需的退出代码,就不必避免使用它。


1

System.exit()是处理大型程序关闭的便捷方式。如果有人想退出,他只需调用System.exit(),它会负责执行所有必要的关闭仪式,如关闭文件、释放资源等。

"该方法永远不会正常返回。"这是文档中写的意思,这意味着该方法不会返回;一旦线程到达那里,它就不会回来。

请参考doc


1

System.exit()被用于终止当前运行的虚拟机(JVM)。

您提供的代码以及类似的代码只要传递给方法调用返回一个整数(0/1/-1)作为其结果,就可以正常工作,因为这些表示进程是否正常终止。

但是为什么您需要这样的编码呢?因为在我能想到的所有情况下,方法调用总是可以在调用System.exit(0);之前进行。

myMethod();
System.exit(0);

基本上和

System.exit(myMethod());

只要myMethod()返回正确的数据类型,当然可以。

不完全相同。假设myMethod返回一个int,那么 System.exit(myMethod()): 等同于 int val = myMethod(); System.exit(val); - FredK

1

没有理由使用system.exit而不是调用它上面的方法。system.exit只会返回异常关闭,可能会导致错误。如果您正确地调用该方法,则无需调用system.exit,并且可以查看代码是否产生任何错误。

出于良好的实践和调试的考虑,建议您使用传统的方法调用而不是system.exit。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接