gpt4 book ai didi

Java Try Catch block

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:07:45 25 4
gpt4 key购买 nike

我最初在大学开始编程并学习了 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 中你使用两个 catch 是这样的:

    try {

} catch (ExceptionType name) {

} catch (ExceptionType name) {

}

我希望有人能解释为什么您需要在 Java 中使用两个捕获以及各自捕获的作用/捕获。

谢谢。

最佳答案

在 Java 中,您可以使用多个 catch block 。

这并不一定意味着您必须这样做。

这取决于您在 try block 中的代码,以及它可能抛出多少个已检查的 Exception(甚至是未检查的 Exception如果你真的想捕获它,通常你不会,你也没有必须)。

一个的做法是对一般的Exception(或者更糟的是,Throwable,它也会捕获RuntimeException 错误:

try {
// stuff that throws multiple exceptions
}
// bad
catch (Exception e) {
// TODO
}

好的做法是捕获所有可能抛出的checked Exception

如果它们中的一些在继承方面相关,总是首先捕获子类(即更具体的 Exception),以免您的代码无法编译:

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 blocks ,其中不相关的 Exception 可以通过每个 Exception 类型之间的 | 分隔符一次性捕获:

try (optionally with resources) {
// stuff that throws FileNotFoundException and MyOwnCheckedException
}
// below exceptions are unrelated
catch (FileNotFoundException | MyOwnCheckedException e) {
// TODO
}

注意

this您链接到的示例,下面的第一个代码片段Put it all together 可能被认为是次优的:它确实捕获了可能抛出的Exceptions,但其中之一是 IndexOutOfBoundsException,这是一个 RuntimeException(未选中),理论上不应处理。

相反,SIZE 变量(或可能的常量)应该替换为对正在迭代的 List 大小的引用,即 list.size( ),以防止抛出 IndexOutOfBoundsException

我想在这种情况下,它只是提供一个示例。

关于Java Try Catch block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35321312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com