Java 差异错误代码或异常

Java 差异错误代码或异常,java,error-handling,Java,Error Handling,可能重复: 我想知道什么时候应该使用C语言中使用的错误代码,什么时候应该使用异常。考虑下面的示例,其中需要一个GETDATA函数,如果成功的话,应该返回一个数据串,否则将返回错误消息。我们应该如何报告错误?作为例外或错误消息 public int fo(arguments) { //some code String data = ""; String errMsg = ""; boolean rc = getData(arguments, data, errMs

可能重复:

我想知道什么时候应该使用C语言中使用的错误代码,什么时候应该使用异常。考虑下面的示例,其中需要一个GETDATA函数,如果成功的话,应该返回一个数据串,否则将返回错误消息。我们应该如何报告错误?作为例外或错误消息

public int fo(arguments) {
    //some code
    String data = "";
    String errMsg = "";
    boolean rc = getData(arguments, data, errMsg);
    // do something based on the results of getData()
    // and report error messages in case of errors
}
您对以下实施有何看法:

boolean getData(some arguments, String data, String errorMessage){
    {
        //check arguments for null pointers or invalid values and return error
        //message
        errorMessage = "Invalid Arguments";
        return false;
    }
    {
        //check for other errors
        errorMessage = "Some Error";
        return false;
    }
    // no error, return valid data
    data = "some valid data";
    return true;
}

据我所知,我们不应该在流控制中使用异常。请您评论一下错误代码和异常的正确使用好吗?

首先,您的示例不起作用,因为在Java中参数是按值传递的。因此,即使您更改了errorMessage的值,该更改在方法外部也不会可见

但是假设您解决了这个问题并正确返回了错误代码,那么问题就归结为您希望在哪里处理错误


异常会自动在调用堆栈上冒泡,直到它们找到处理该特定类型异常的catch块。这使您有机会在更高的级别上处理它们,而如果您返回错误代码,则必须立即在直接调用方中处理该错误代码,然后可能会为其调用方设置另一个错误代码,等等,当您看到此模式时,您可以确定您应该抛出一个异常。首先,您的示例不起作用,因为在Java中参数是按值传递的。因此,即使您更改了errorMessage的值,该更改在方法外部也不会可见

但是假设您解决了这个问题并正确返回了错误代码,那么问题就归结为您希望在哪里处理错误


异常会自动在调用堆栈上冒泡,直到它们找到处理该特定类型异常的catch块。这使您有机会在更高的级别上处理它们,而如果您返回错误代码,则必须立即在直接调用方中处理该错误代码,然后可能会为其调用方设置另一个错误代码,等等,当您看到此模式时,您可以确定应该抛出异常,而不是

errorMessage=无效参数;返回false;==>抛出新的IllegalArgumentExceptionValid参数:例如,在这种情况下,数据为null是人们所期望的。想要更正标题中的键入错误,但出于某种原因,对该标题提出质疑一些人认为不应在此处使用例外。我不明白为什么不。如果使用异常,可以让方法返回数据或抛出包含错误消息的异常。您当前尝试返回3条数据的方法将无法按您的方式工作。errorMessage=无效参数;返回false;==>抛出新的IllegalArgumentExceptionValid参数:例如,在这种情况下,数据为null是人们所期望的。想要更正标题中的键入错误,但出于某种原因,对该标题提出质疑一些人认为不应在此处使用例外。我不明白为什么不。如果使用异常,可以让方法返回数据或抛出包含错误消息的异常。您当前尝试返回3条数据的方法将无法按您现有的方式工作。