尝试/多次捕捉与单次捕捉

Aar*_*ron 10 java try-catch

在Eclipse中添加try/catch块时,它给了我"Surround with try/multi-catch"或"Surround with try/catch"的选项.

这是try/multi-catch:

try {
    save.load(new FileInputStream(file.getAbsolutePath()));
}
catch (FileNotFoundException | IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

这是单个try/catch:

try {
    save.load(new FileInputStream(file.getAbsolutePath()));
}
catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

使用其中一个或哪个有什么好处/后果?如果我是正确的,第一个示例将在抛出异常的ECEER并生成SAME CATCH时执行catch块,而第二个示例将在启用单独的catch块时基于异常抛出catch.

还有什么我应该知道的吗?我以前从未使用它们,也不知道它们是否值得使用.

ζ--*_*ζ-- 7

tl; Dr Mutlicatch单独处理事物,多个捕获块更灵活,更好操作.这两种技术可以结合起来.

如果你有一个可以抛出许多不同异常类型的try语句,你将需要多个catch块.这是更多的代码,但提供了更大的灵活性.

例如,如果使用套接字,SocketException可能只会被重新连接和/或错误消息捕获(因为像无意中断开的电缆那样简单可能会导致这种情况)

如果捕获到空指针异常(虽然它未被检查),您将要写入日志并在此处进行紧急着陆,清理可能的内容,并可能以代码方式回溯.

此外,这可以进一步细分,其中不同类型的"常见"异常可能导致采取不同的操作(例如连接丢失与名称未解析,对最终用户在第一次连接尝试时具有不同的含义)和不同的"重"异常也以不同的方式处理.

虽然您可以拥有一个(多个异常类型)catch块,但它可以单独对所有异常采取类似操作(以与基于拔出电缆的条件相同的方式向用户显示空指针异常)或者需要if e instanceof FooException块会降低可读性.

您还可以将两者结合起来,将所有"常见"异常多路复用到重试和良好消息中,并将所有严重异常转换为强制清除和关闭

您不希望堆栈跟踪用于跳闸电缆,并且您不希望刷掉丢失的对象.