Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回值并引发异常?_Java_Exception_Exception Handling - Fatal编程技术网

Java 返回值并引发异常?

Java 返回值并引发异常?,java,exception,exception-handling,Java,Exception,Exception Handling,我正在使用一个API,它声称如果成功将返回true,如果失败将返回false。但是,它也声称如果失败会抛出不同的异常。它如何返回false并抛出异常?不可能同时抛出异常并从单个函数调用返回值 如果出现错误,它可能会返回false,但如果输入无效,则会抛出异常 编辑:发布了一个(现已删除)的答案,指出在当前线程中返回一个值的同时,从技术上讲,在不同的线程中引发异常是可能的。我认为这是值得注意的,即使它不是您应该看到的东西。您可以抛出一个具有(在本例中为布尔值)值的异常: 虽然可以通过函数调用派生异

我正在使用一个API,它声称如果成功将返回true,如果失败将返回false。但是,它也声称如果失败会抛出不同的异常。它如何返回false并抛出异常?

不可能同时抛出异常并从单个函数调用返回值

如果出现错误,它可能会返回
false
,但如果输入无效,则会抛出异常


编辑:发布了一个(现已删除)的答案,指出在当前线程中返回一个值的同时,从技术上讲,在不同的线程中引发异常是可能的。我认为这是值得注意的,即使它不是您应该看到的东西。

您可以抛出一个具有(在本例中为布尔值)值的异常:


虽然可以通过函数调用派生异常和值的方式编写代码(参见上面的文章),但永远不应该通过正确的编码来完成

我想看看这个API的文档链接。API应优先考虑清晰性。抛出异常并返回值会留下一个问题,即返回的值是否可以安全使用或是否无效

请记住,try/catch块是处理异常的另一种方法。它们不会将异常传递给调用方法,而是以开发人员认为合适的方式在内部处理异常


如果出于调试目的,您需要在异常情况下查看结果值,那么Bohemian的想法很有效。

我就是这么想的。我认为finally块可能有一些技巧。一旦抛出一个异常,你的程序就会停止运行,因此不可能同时执行这两个操作。我不知道你的“try”块中是否有一个return语句,程序是否仍然通过“final”块,因为如果你在try块中返回一个值,并在final块中放置一个throws异常,那么你就可以同时执行这两个操作了。@Karel Jan Misseghers:不,在Java中,一旦抛出异常,你的程序肯定不会停止运行。您对Java异常如何工作感到困惑,显然还没有完成任何多线程Java编程。当另一个线程中发生未检查的异常时,您可以让许多线程愉快地继续工作。在很多情况下,垂死的线程会自动重新启动(最著名的是某些OS/JVM上Swing的EDT:如果EDT死掉,新的EDT会重新启动)。啊哈,多线程,我现在就安静下来(我已经看到了Java中的多线程编程理论,但还没有使用它)很抱歉让人困惑@Karel Jan:如果在try块中有一个返回,它仍然会执行finally块(如果finally块没有抛出异常,那么返回)。如果finally块中有一个return,它将抑制异常(如果有的话)并返回。(见附件。)
public class ValueException extends Exception {
    final boolean value;

    public ValueException(boolean value, String message) {
        super(message);
        this.value = value;
    }

    public boolean getValue() {
        return value;   
    }
}