Java 如何决定函数应该返回错误还是生成异常?

Java 如何决定函数应该返回错误还是生成异常?,java,Java,库和API有时返回-1或null以指示错误 在其他情况下,它们会生成异常 如果我必须编写自己的函数,我应该在什么时候使用返回值来指示错误,什么时候出现异常?通常当某个方法返回值时,这是因为它是一个由其他方法调用的内部方法,并且在用户可以访问时生成异常。您可以处理此异常,并且不会向用户显示错误。通常当某个方法返回值时,这是因为这是一个由其他人调用的内部方法,并在用户可以访问时生成异常。您可以处理此异常,并且不会向用户显示错误。编辑:我无意中进入了java land。。这个答案的代码是c#。。对不起

库和API有时返回-1或null以指示错误

在其他情况下,它们会生成异常


如果我必须编写自己的函数,我应该在什么时候使用返回值来指示错误,什么时候出现异常?

通常当某个方法返回值时,这是因为它是一个由其他方法调用的内部方法,并且在用户可以访问时生成异常。您可以处理此异常,并且不会向用户显示错误。

通常当某个方法返回值时,这是因为这是一个由其他人调用的内部方法,并在用户可以访问时生成异常。您可以处理此异常,并且不会向用户显示错误。

编辑:我无意中进入了java land。。这个答案的代码是c#。。对不起

异常是昂贵的(它们使您的程序变慢),所以它们应该只用于真正特殊的情况。我的做法是,大多数时候,我只在我的私有函数中返回-1,因为它们不需要像其他函数那样严格的文档。如果经常出现错误,那么使用格式
bool TrySomething(in,out result)
的函数也是一个不错的约定

然后,客户机可以执行以下操作:

if(TrySomething(in, out result))
    handle(result);
else
    //failed Something

如果这不实用,那么通常异常会更安全,因为它们不会给您任何无声错误(除非您使用空的
catch
块处理异常)。

编辑:我无意中进入了java领域。。这个答案的代码是c#。。对不起

异常是昂贵的(它们使您的程序变慢),所以它们应该只用于真正特殊的情况。我的做法是,大多数时候,我只在我的私有函数中返回-1,因为它们不需要像其他函数那样严格的文档。如果经常出现错误,那么使用格式
bool TrySomething(in,out result)
的函数也是一个不错的约定

然后,客户机可以执行以下操作:

if(TrySomething(in, out result))
    handle(result);
else
    //failed Something

如果这不实用,那么通常异常会更安全,因为它们不会给您任何静默错误(除非您使用空的
catch
块处理异常)。

如果使用
String.indexOf(…)
,您将看到它返回-1,但这不是错误。在查询数据库时也是如此,如果没有找到所需内容,则返回null


但是对于真正的错误,真正的问题,最好抛出一个异常。

如果使用
String.indexOf(…)
,您将看到它返回-1,但这不是一个错误。在查询数据库时也是如此,如果没有找到所需内容,则返回null

但是对于真正的错误,真正的问题,最好抛出一个异常。

如果它真的是一个错误(函数未能完成它应该做的事情,因为一些内部意外错误或因为参数违反了一些约束),那么你应该抛出一个异常-这就是异常的用途

例如,对于“查找给定字符串中子字符串的位置”之类的内容,可以返回
null
或-1表示“未找到”。但这不是一个错误,这是正确的和预期的(“非异常”)行为。

如果它确实是一个错误(函数未能完成它应该做的事情,因为一些内部意外错误或参数违反了某些约束),那么您应该抛出一个异常-这就是异常的用途


例如,对于“查找给定字符串中子字符串的位置”之类的内容,可以返回
null
或-1表示“未找到”。但这不是一个错误,这是正确的和预期的(“非异常”)行为。

异常会向开发人员(有时是您自己,通常是其他人)传达特定方法或函数的意思:

我不能处理这个问题,这是别人的责任

例如,如果您的方法正在解析一个字符串并返回一个int,那么如果传递一个类似“xyzy”的字符串,它是否应该返回-1

否,-1将是错误的返回错误值,因为“-1”是表示合法int的合法字符串

这里是一个希望解析方法抛出异常的例子。调用方法必须处理解析异常。您(和未来的)开发人员会明白,处理解析错误是调用方的责任


编辑:在这种特殊情况下,您可以让函数返回一个整数而不是int。然后您可能会有一个协定,null(对整数有效但对int无效)将表示某种错误。但由于null是一个单一值,因此调用程序将无法区分字符串是不可解析(“xyzzy”)还是太大而无法表示(“2147483648”)。

异常会向开发人员(有时是您自己,通常是其他人)传达特定方法或函数的信息:

我不能处理这个问题,这是别人的责任

例如,如果您的方法正在解析一个字符串并返回一个int,那么如果传递一个类似“xyzy”的字符串,它是否应该返回-1

否,-1将是错误的返回错误值,因为“-1”是表示合法int的合法字符串

这里是一个希望解析方法抛出异常的例子。调用方法必须处理解析异常。您(和未来的)开发人员会明白,处理解析错误是调用方的责任

编辑:在这种特殊情况下,您可以让函数返回一个整数而不是int。然后您可能会有一个协定,null(对整数有效但对int无效)将表示某种错误。但是,因为null是一个值,所以调用程序将无法区分字符串是不可解析(“xyzy”)还是太大而无法解析