在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.
还有什么我应该知道的吗?我以前从未使用它们,也不知道它们是否值得使用.
tl; Dr Mutlicatch单独处理事物,多个捕获块更灵活,更好操作.这两种技术可以结合起来.
如果你有一个可以抛出许多不同异常类型的try语句,你将需要多个catch块.这是更多的代码,但提供了更大的灵活性.
例如,如果使用套接字,SocketException可能只会被重新连接和/或错误消息捕获(因为像无意中断开的电缆那样简单可能会导致这种情况)
如果捕获到空指针异常(虽然它未被检查),您将要写入日志并在此处进行紧急着陆,清理可能的内容,并可能以代码方式回溯.
此外,这可以进一步细分,其中不同类型的"常见"异常可能导致采取不同的操作(例如连接丢失与名称未解析,对最终用户在第一次连接尝试时具有不同的含义)和不同的"重"异常也以不同的方式处理.
虽然您可以拥有一个(多个异常类型)catch块,但它可以单独对所有异常采取类似操作(以与基于拔出电缆的条件相同的方式向用户显示空指针异常)或者需要if e instanceof FooException块会降低可读性.
您还可以将两者结合起来,将所有"常见"异常多路复用到重试和良好消息中,并将所有严重异常转换为强制清除和关闭
您不希望堆栈跟踪用于跳闸电缆,并且您不希望刷掉丢失的对象.
| 归档时间: |
|
| 查看次数: |
11245 次 |
| 最近记录: |