Java 返回值并引发异常?
我正在使用一个API,它声称如果成功将返回true,如果失败将返回false。但是,它也声称如果失败会抛出不同的异常。它如何返回false并抛出异常?不可能同时抛出异常并从单个函数调用返回值 如果出现错误,它可能会返回Java 返回值并引发异常?,java,exception,exception-handling,Java,Exception,Exception Handling,我正在使用一个API,它声称如果成功将返回true,如果失败将返回false。但是,它也声称如果失败会抛出不同的异常。它如何返回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;
}
}