Java 中是不是有 EXIT_SUCCESS 和 EXIT_FAILURE 的替代品?
Posted
技术标签:
【中文标题】Java 中是不是有 EXIT_SUCCESS 和 EXIT_FAILURE 的替代品?【英文标题】:Is there a replacement for EXIT_SUCCESS and EXIT_FAILURE in Java?Java 中是否有 EXIT_SUCCESS 和 EXIT_FAILURE 的替代品? 【发布时间】:2011-10-26 18:09:08 【问题描述】:在C程序中,我一般在exit()
函数中使用EXIT_SUCCESS
或EXIT_FAILURE
来提高程序的清晰度和可理解性。
但是在System.exit()
我不能使用这些宏。
我可以将自己的界面定义为
public interface ReturnValues
public int EXIT_SUCCESS = 0;
public int EXIT_FAILURE = 1;
除了我自己的实现,java中还有其他方法可以使用这些宏吗? (例如使用预定义的库类变量或通过实现预定义的接口等。)
【问题讨论】:
@McDowell 是的,确实如此。参考:gnu.org/s/hello/manual/libc/Exit-Status.html。谢谢你的评论。我纠正了它。但在 C 中任何函数的一般理论中,错误将返回 -1。我对吗?需要解释。 退出代码范围是 system dependent 但我相信 POSIX 系统将值限制为 0-255。 @EAGER_STUDENT 在 2 的补码中,-1 映射到全 1 的二进制数。或者,在十六进制中,所有 F。用作错误的退出值可能不是标准的,但 0000 和 FFFF 之间的差异肯定比 0000 和 0001 之间的差异更容易看出。当然,任何理智的处理器都会花费相同的时间来区分差异,但作为人类,这很好。 【参考方案1】:Java 中没有宏。 System.exit(0)
和 System.exit(-1)
可读性很强,不会过于复杂。
【讨论】:
【参考方案2】:不,Java 中没有用于 SUCCESS 和 FAILURE 的预定义常量。当然,因为可能存在几种不同类型的故障,具体取决于每个特定的应用程序。
【讨论】:
只是为了澄清一下,无论使用哪种操作系统和编程语言,都可能存在不同类型的故障和故障代码。 EXIT_SUCCESS 定义为成功运行,其他所有代码均失败。 EXIT_FAILURE 是一个通用的失败代码,如果您不想具体说明,则可以使用。 EXIT_SUCCESS 的定义取决于系统。在 Posix 中为 0。Windows 将其定义为 1。gnu.org/software/libc/manual/html_node/Exit-Status.html 投反对票,因为您在多个方面都错了。 EXIT_SUCCESS 和 EXIT_FAILURE 存在,因此,如果您不想具体但不知道主机系统上的成功和失败对应的数字,您可以使用这些常量。通常,0 是成功,任何非零值都是失败,但这并不是普遍正确的,因此 C 标准库规定。顺便说一句,对于特定的错误代码(至少在 Linux 中),您可以使用 sysexits.h 作为指南。退出代码因系统和应用程序而异,因此 Java 中的奇怪之处在于不提供标准化接口。【参考方案3】:在 java 中,对这种事情使用枚举:
public enum ReturnValue
SUCCESS(0),
FAILURE(-1);
private int returnCode;
private ReturnValue(int returnCode)
this.returnCode = returnCode;
public int getReturnCode()
return returnCode;
使用方法:
System.exit(ReturnCode.FAILURE.getReturnCode());
【讨论】:
他问“other that my own implementation
”。这是自己的实现。我相信他会问 Java 是否有这些内置的常量枚举
它在普通 int 常量上添加了什么?
@JB:类型检查是否在应用程序的其他地方需要它。
仅仅因为 Java 有 enum
类型并不意味着你应该总是使用它们。在这种情况下,您最终会编写额外的代码来定义enum
和使用它的额外代码。不是 IMO 的改进。
至少在 Linux 上,FAILURE 是 1 而不是 -1。但这就是 ISO-C 提供 EXIT_FAILURE 的全部意义——没有一个常量应该在所有平台上都使用。可惜 JAVA 没有。以上是关于Java 中是不是有 EXIT_SUCCESS 和 EXIT_FAILURE 的替代品?的主要内容,如果未能解决你的问题,请参考以下文章
我应该从 main() 返回 EXIT_SUCCESS 还是 0?
EXIT_SUCCESS 和 EXIT_FAILURE。它是编译一次在任何地方运行还是一次编写到处编译? [复制]
C语言基础:错误处理(errnoperror() 和 strerror()除数为0的错误程序退出状态 EXIT_SUCCESS)