我最初从大学开始编程,然后学习了vb.net。现在,我决定转向Java并进行一些查询。在vb中,try catch语句的布局如下
try
Catch ex as exception
finally
End catch
但是在Java网站(https://docs.oracle.com/javase/tutorial/essential/exceptions/putItTogether.html)中,我发现在Java中,您使用了两个陷阱,如下所示:
try {
} catch (ExceptionType name) {
} catch (ExceptionType name) {
}
我希望有人能够解释为什么您需要在Java中使用两个catch,以及各自的catch做/捕获什么。
谢谢。
在Java中,可以使用多个catch
块。
它不一定意味着您必须这样做。
这取决于你的代码必须在try
块,多少检查Exception
的IT可能会潜在地抛出(甚至未选中Exception
■如果你真的想赶上那班,通常你不这样做,你不有)。
一种不好的做法是将单个处理程序用于一般Exception
(或更糟糕的是Throwable
,也将捕获RuntimeException
s和Error
s):
try {
// stuff that throws multiple exceptions
}
// bad
catch (Exception e) {
// TODO
}
在良好的做法是捕获所有可能抛出检查 Exception
秒。
如果它们中的一些在继承方面相关,请始终先捕获子类(即更具体的Exception
s),以免您的代码无法编译:
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块,其中不相关的Exception
s可以一次捕获|
,每种Exception
类型之间使用分隔符:
try (optionally with resources) {
// stuff that throws FileNotFoundException and MyOwnCheckedException
}
// below exceptions are unrelated
catch (FileNotFoundException | MyOwnCheckedException e) {
// TODO
}
笔记
在您链接到的这个示例中,将它们放在一起下面的第一个代码片段可以说是次优的:它确实捕获了可能抛出的Exception
s,但是其中一个是IndexOutOfBoundsException
,这是一个RuntimeException
(未选中),不应理论上处理。
取而代之的是,SIZE
变量(或可能的常量)应由对List
要迭代的大小的引用来代替,即list.size()
为了防止IndexOutOfBoundsException
被抛出。
我想在这种情况下只是提供一个例子。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句