所以我有一个关于Java的快速问题。
所以在C语言中,有些方法(特别是main)看起来像这样:
int main(){
printf("Test");
return 0;
}
int返回类型,因为这里的一些C开发人员可能知道显示该方法是否返回错误,0表示没有错误的返回。所以我想,如果我做了像Java这样的方法:
public int test(){
return 0;
}
整数返回是否显示返回错误?
答案 0 :(得分:4)
整数返回是否显示返回错误?
通常情况下,虽然每个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站点上的This tutorial详细介绍了异常和异常处理。
现在,有时你可能会有一个方法应该返回int
或一个表示非异常条件的标志,表明int
不可用。既然它是正常的,你期望它发生,它不应该是一个例外,但你仍然需要以某种方式标记它。在这种情况下,一种选择是使用Integer
而不是int
,并在null
不可用的非例外情况下返回int
。 Integer
是与原始int
对应的对象类型。 Java的自动装箱和自动拆箱使得在这些情况下使用Integer
非常简单。
最终成为“例外”或“非例外”的是一个非常多的判断调用,因此您会看到不同的API设计师做的事情略有不同。
答案 1 :(得分:1)
在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中到达堆栈顶部的异常提供了堆栈跟踪转储,通常允许人们比任何退出代码更容易找到并修复问题。
答案 2 :(得分:0)
你在这里混淆了一些事情。大多数操作系统上的进程都有退出代码。按照惯例,这通常表示该过程的成功或错误。在C中,此退出代码表示为入口点的返回值。
此外,在C中,它是一个常见的模式,函数在出错时会返回一些特殊值(通常为0或NULL
),因为没有异常信号。再次,只是一个惯例。
在Java中,这两者都相当罕见。异常通常是表示意外错误情况的更好方式,并且入口点没有返回值。
答案 3 :(得分:0)
整数返回会显示/是否有错误返回?
这完全取决于 关于调用它的函数打算如何使用该值。整数返回值可以用于错误代码,或者它可以用于事物的 count (字符串的长度,树中的元素数量,shabazzes frobbed),或者它可以指示规模上的值(温度,海拔,美元等)。
在某些情况下,0
的值是带外值(对于给定域无效,如C样式字符串末尾的零终止符)或NULL指针)。在其他情况下,它是一个完全有效的数据值(温度,海拔,航向)。
请注意,在Java中main
会返回void
,而不是int
。 Java的检测和处理错误的理念与C语言不同。