Java 抛出不同异常的点

Java 抛出不同异常的点,java,exception,Java,Exception,我发现这个例子: try { // some code } catch(FileNotFoundException e) { throw e; } catch(Exception e) { throw e; } 有人能告诉我两个单独的块都抛出异常有什么意义吗 这个代码会产生同样的效果吗 try { // some code } catch(Exception e) { throw e; } 是和否。使用两个不同的catch块的目的是使程序能够以不同的方

我发现这个例子:

try {
    // some code
} catch(FileNotFoundException e) {
    throw e;
} catch(Exception e) {
    throw e;
}
有人能告诉我两个单独的块都抛出异常有什么意义吗

这个代码会产生同样的效果吗

try {
    // some code
} catch(Exception e) {
    throw e;
}

是和否。使用两个不同的
catch
块的目的是使程序能够以不同的方式处理不同的错误。此外,通过将代码分为两个块,原始代码将保持原始异常类型,以便由不同的方法捕获。但是,在这种情况下,由于它们都在做相同的事情(重新引发异常),您可以组合成一个
catch(异常e)
,但不建议这样做。捕获异常时,应始终尽可能具体。由于
异常
类是所有异常的父类,包括
FileNotFoundException
,因此单独捕获
异常
几乎总是不好的做法。

是和否。使用两个不同的
捕获
块的目的是使程序能够以不同的方式处理不同的错误。此外,通过将代码分为两个块,原始代码将保持原始异常类型,以便由不同的方法捕获。但是,在这种情况下,由于它们都在做相同的事情(重新引发异常),您可以组合成一个
catch(异常e)
,但不建议这样做。捕获异常时,应始终尽可能具体。由于
异常
类是所有异常的父类,包括
FileNotFoundException
,因此单独捕获
异常
几乎总是不好的做法。

假设您从文件系统中读取了一个文件,然后将一些数据保存到数据库中。当您尝试读取文件时,由于找不到文件或权限问题而出现错误。因此,您希望记录并退出流,而不是继续保存到数据库。但是当读取成功时,您会检查与数据库的连接,并且连接正确。然后转到表的insert,但在回滚和记录的SQL捕获中存在与某些重复记录相关的问题



假设您从文件系统中读取了一个文件,然后将一些数据保存到数据库中。当您尝试读取文件时,由于找不到文件或权限问题而出现错误。因此,您希望记录并退出流,而不是继续保存到数据库。但是当读取成功时,您会检查与数据库的连接,并且连接正确。然后转到表的insert,但在回滚和记录的SQL捕获中存在与某些重复记录相关的问题



单独重新催促是毫无意义的。但有时您可能想做一些类似于日志记录的事情,但仍然无法捕获异常。然后,您可以首先捕获异常,然后在catch块中执行要执行的操作并重新抛出异常。单独进行重新抛出是毫无意义的。但有时您可能想做一些类似于日志记录的事情,但仍然无法捕获异常。然后,您可以首先捕获异常,然后在catch块中执行要执行的操作并重新显示异常。
try {
    // Read from a file
    // Save to the database
}catch(IOException e) {
    // log
}catch(SQLException e) {
   // rollback
   // log
}finally {
   // close IO resources
   // close SQL resources
}