请解释返回异常和抛出异常之间的区别吗?
我看到一些程序使用return new IOException()和throw new IOException()。为什么我们使用return语句,在那一刻包含上面的return语句的方法是停止执行?
答案 0 :(得分:1)
请解释返回异常和抛出异常之间的区别。
区别在于:
抛出异常是正常的事情。它改变了控制流程。
返回异常是合法的,但不寻常。它不会改变控制流程 1 。
1 - ...除非任何 return
语句执行此操作。 JLS讨论执行语句正常完成或突然完成。如果您需要完整的详细信息,请阅读JLS 14.1。
然而......
return new SomeException(...);
....这是一个相当可疑的事情。我能想到的唯一合理用例是你的代码是使用这些异常对象来标记多个错误,还有其他东西正在收集和报告它们。如果需要捕获检测到错误的位置的堆栈跟踪,则可能执行此操作。但如果没有,使用这样的例外只是丑陋和低效。
为什么我们使用return语句,那一刻包含上面return语句的方法是停止执行?
没有。返回异常与返回任何其他值没有什么不同。它不会停止执行。
如果您向我们展示了(真实的)应用程序代码的示例,我们可以解释它。
答案 1 :(得分:0)
抛出异常意味着出现问题,您必须尝试捕获执行,否则将停止该线程。
另一方面,返回异常意味着没有错。您只是创建一个对象(就像任何其他对象一样)。你仍然需要抛出那个异常对象让程序知道发生了异常。
我们假设你想要一个像Device is not ready
这样的例外。现在你可以保留一个方法来创建这样的异常,
public Exception getMyException() {
return new Exception("Device is not ready yet.");
}
要使用exception
,您需要调用该方法并抛出异常,如下所示
public void checkFile() {
if(...check device status is not ready ...) {
throw getMyException();// or you could use any built-in ex like new IOException("....");
}
}