繁体   English   中英

Java中的整数返回类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM