我一直在阅读有关异常的更多内容,但我不确定在什么情况下我们应该抛出一个方法
public void fxml() throws IOException
{
// method body here
}
或捕获方法内的异常
public void fxml()
{
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("fxml.fxml"));
try
{
fxmlLoader.load();
}
catch (IOException exception)
{
throw new RuntimeException(exception);
}
}
从 Oracle 的例子来看,它说
有时,代码适合捕获其中可能发生的异常。然而,在其他情况下,最好让调用堆栈上方的方法来处理异常。例如,如果您将 ListOfNumbers 类作为类包的一部分提供,则您可能无法预测包中所有用户的需求。在这种情况下,最好不要捕获异常并允许调用堆栈上方的方法来处理它。
https://docs.oracle.com/javase/tutorial/essential/exceptions/declaring.html https://docs.oracle.com/javase/tutorial/essential/exceptions/declaring.html
所以我很好奇这是否意味着我们可能不需要该类/方法,并且通过在该方法中执行 try/catch,如果我们不使用它,它就没有任何作用,所以我们“扔掉它”以后用?
似乎类本身也会“抛出异常”以便稍后使用......它只是一个抛出层次结构,直到您最终可以使用它吗?在上面的教程中,几章后面有一章称为“链式异常”,这本质上是稍后使用的方法抛出的情况吗?
我也读过这个帖子何时在 Java 方法声明中使用 throws? https://stackoverflow.com/questions/4392446/when-to-use-throws-in-a-java-method-declaration
但我发现它并没有完全解释我想知道的事情,但是我发现了这种兴趣
如果您正在捕获异常类型,则不需要抛出它,除非您要重新抛出它。在您发布的示例中,开发人员应该执行其中一项操作,而不是同时执行两项操作。
通常,如果您不打算对异常执行任何操作,则不应捕获它。
您能做的最危险的事情就是捕获异常而不对其进行任何操作。
我不太确定他所说的“重新抛出”它是什么意思,除非他说的是抛出该方法并稍后捕获它?
然后他谈到,如果您不打算使用它,则不要执行任何异常操作,因此,如果我们需要它,似乎最好将其丢弃以供以后使用?
然后说它危险吗?为什么是这样?
因此,本质上,如果我们不知道是否要使用它,那么我们应该抛出它,以便可以调用方法本身,或者如果我们知道它将被调用,无论如何,那么我们应该尝试一下/捕获块?
我还注意到我的示例还引发了基于 IOException 的 RuntimeException。因此,从某种意义上说,您可以采用我们抛出的第一个方法,无论异常是什么,然后将其扔到 try 或 catch 块中?看起来 catch 块更适合“RuntimeException”或其他系统异常之一,但也许还有其他用例?
想法?
谢谢您的帮助!