[英]Integer return types in Java
所以我有一个关于Java的快速问题。
因此在C语言中,某些方法(尤其是main方法)如下所示:
int main(){
printf("Test");
return 0;
}
一些C开发人员在这里可能知道的int返回类型表明该方法是否返回错误,其中0表示没有错误。 所以我想,好吧,如果我在Java中做这样的事情:
public int test(){
return 0;
}
整数返回会显示是否返回错误吗?
整数返回会显示是否返回错误吗?
尽管每个API设计人员都可以做出自己的选择,但通常情况并非如此。
通常,在Java中,将错误建模为Exception
并将其抛出而不是返回。 (据我所知,现代C ++就是这种情况。)
因此,例如,如果您有一个解析整数的函数,则可能具有:
int parseInt(String str) throws NumberFormatException {
// ...implementation
}
如果parseInt
返回,则返回成功 。 否则,它将抛出。 您可以这样使用它:
try {
int value = parseInt(str);
doSomethingWith(value);
// more main-line code here
// ...
}
catch (NumberFormatException ex) {
// Deal with the exceptional case of an invalid input
}
Oracle Java网站上的本教程详细介绍了异常和异常处理。
现在,有时您可能有一个方法应该返回一个int
或一个标志,该标志指示一个非异常情况,该条件指示int
不可用。 由于这是正常现象,因此您可以预期会发生这种情况,但这也不例外,但是您仍然需要以某种方式对其进行举报。 在这种情况下,一种选择是使用Integer
而不是int
并且在int
不可用的非例外情况下返回null
。 Integer
是与原始int
对应的对象类型。 Java的自动装箱和自动拆箱使在这种情况下使用Integer
变得相当简单。
最终变成“例外”或“非例外”的情况很大程度上是一个判断调用,因此,您会看到不同的API设计器在做事上略有不同。
在C main
,返回值被复制到进程的退出代码值中。
在Java中,JVM实际上是在运行,它只是根据您提供给命令行的类中的方法public static void main(String[] args)
来“启动”用户提供的类集。
因此,您的类实际上并未退出,因此java
程序退出了。 也就是说,有一种方法可以使java
程序返回特定的退出代码。 您调用System.exit(5)
, java
将以退出代码5
退出。
请注意,退出代码通常不可移植。 例如,在C
中,要成功退出,您应该使用EXIT_SUCCESS
而不是0
。 虽然它们在许多平台上都是相同的,但EXIT_SUCCESS
定义为与环境匹配。
有些系统不支持退出代码(它们很少见)。 成功的退出代码可以不同于0(再次很少见)。 Java避免了所有这些情况,因为它通过报告错误代码来促进抛出异常。 也就是说,有时要与其他系统集成,确实需要发出退出代码。 只是不要将其视为一种非常“ java”的工作方式。 在JVM中到达堆栈顶部的异常提供了堆栈跟踪转储,通常它使查找和解决问题的方法比任何退出代码都容易得多。
您在这里混淆了几件事。 大多数操作系统上的进程都有退出代码。 按照惯例,这通常表示该过程的成功或失败。 在C语言中,此退出代码作为入口点的返回值浮出水面。
此外,在C语言中,这是一种常见的模式,函数在发生错误时会返回一些特殊值(通常为0或NULL
),因为没有异常可以发出信号。 再次,只是一个约定。
在Java中,这两种情况都很少见。 异常通常是发出意外错误情况的一种更好的方式,并且入口点没有返回值。
整数返回会显示是否返回错误吗?
这完全取决于调用它的函数打算如何使用该值。 整数返回值可以用于错误代码,或者可以用于事物计数 (字符串的长度,树中元素的数量,shabazzes frobed),或者可以指示刻度上的值(温度) ,海拔,美元等)。
在某些情况下,值0
是带外值(对于给定的域无效,例如C样式字符串末尾的零终止符或NULL指针)。 在其他情况下,它是一个完全有效的数据值(温度,海拔高度,航向)。
注意,在Java中main
返回void
,而不是int
。 Java的检测和处理错误的哲学与C的哲学不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.