使用 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()
适用的情况:
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() 调用同一类中的另一个方法的主要内容,如果未能解决你的问题,请参考以下文章
如何从同一个类中的另一个构造函数调用抽象类的构造函数(方法重载)[重复]
使用Swing时的Java方法 - 可以在同一个类中的另一个事件方法中调用event方法吗?