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

Posted

技术标签:

【中文标题】使用 System.exit() 调用同一类中的另一个方法【英文标题】:Using System.exit() to call another method within the same class 【发布时间】:2015-10-07 09:05:05 【问题描述】:

我有什么理由避免像下面的示例代码那样调用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());
    

【问题讨论】:

你没有打电话给processClients "in" System.exit。您正在调用processClients,然后将返回值用作System.exit 的参数。它们是完全独立的。 【参考方案1】:

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

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

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

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

这里你使用你的方法的值是指myBank.processClients()。所以退出值就是上述方法的返回值0

For more

【讨论】:

【参考方案2】:

System.exit() 应谨慎使用。终止程序的正常方法是终止所有用户线程。

System.exit() 适用的情况:

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

System.exit() 方法强制终止 Java 虚拟机中的所有线程。这太严重了....System.exit() 应该保留用于灾难性错误退出,或者当程序打算用作命令脚本中的实用程序时,可能取决于程序的退出代码。

你可以这样调用这个静态方法:

System.exit(int status);

其中status - 退出状态。

例如,如果status = 1,你会得到:

【讨论】:

这个答案包含一些明智的东西,但设法完成了逃避问题【参考方案3】:

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

至于避免它,只要您确定该函数将始终返回您想要的退出代码,您就不必避免它。

【讨论】:

【参考方案4】:

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

"此方法永远不会正常返回。"是在 doc 中编写的,这意味着该方法不会返回;一旦一个线程去那里,它就不会回来了。

请参考doc

【讨论】:

【参考方案5】:

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);【参考方案6】:

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

为了良好的实践和调试,我建议您使用传统的方法调用而不是 system.exit。

【讨论】:

以上是关于使用 System.exit() 调用同一类中的另一个方法的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中从同一类中的另一个方法调用方法

如何从同一个类中的另一个构造函数调用抽象类的构造函数(方法重载)[重复]

如何从同一类中的另一个方法检索最后插入的 id?

使用Swing时的Java方法 - 可以在同一个类中的另一个事件方法中调用event方法吗?

我想从同一个 dart.file 中的另一个类中调用基于函数的小部件中的值到 Text 小部件中

NodeJS:从同一文件中的另一个函数内部调用函数