小编典典
在Java中, 可以 使用多个catch块。
它不一定意味着您必须这样做。
这取决于你的代码必须在try块,多少检查Exception的IT可能会潜在地抛出(甚至未选中Exception■如果你真的想赶上那班,通常你不这样做,你不
有 )。
一种 不好的
做法是将单个处理程序用于一般Exception(或更糟糕的是Throwable,也将捕获RuntimeExceptions和Errors):
try {
// stuff that throws multiple exceptions
}
// bad
catch (Exception e) {
// TODO
}
在 良好 的做法是捕获所有可能抛出 检查 Exception秒。
如果它们中的一些在继承方面相关,请始终先捕获子类(即更具体的Exceptions),以免您的代码无法编译:
try {
// stuff that throws FileNotFoundException AND IOException
}
// good: FileNotFoundException is a child class of IOException - both checked
catch (FileNotFoundException fnfe) {
// TODO
}
catch (IOException ioe) {
// TODO
}
还要看一下Java 7的multi-
catch块,其中不相关的Exceptions可以一次捕获|,每种Exception类型之间使用分隔符:
try (optionally with resources) {
// stuff that throws FileNotFoundException and MyOwnCheckedException
}
// below exceptions are unrelated
catch (FileNotFoundException | MyOwnCheckedException e) {
// TODO
}
注意
在您链接到的这个示例中,
将它们放在一起 下面的第一个代码片段可以说是次优的:它 确实
捕获了可能抛出的Exceptions,但是其中一个是IndexOutOfBoundsException,这是一个RuntimeException(未选中),不应理论上处理。
取而代之的是,SIZE变量(或可能的常量)应替换为对List要迭代的大小的引用,即list.size()为了防止IndexOutOfBoundsException被抛出。
我想在这种情况下只是提供一个例子。
2020-11-26