gpt4 book ai didi

java - 嵌套的 try/catch block : Two Different Implementations

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:29 24 4
gpt4 key购买 nike

我花了一些时间通过本科时使用的教科书重新学习 Java。在他们对异常的解释的最后,他们提供了以下代码:

public class ReadingObjects {

public static void main(String[] args) {
try{
FileInputStream fis = new FileInputStream("objects");
ObjectInputStream ois = new ObjectInputStream(fis);

try{
while(true){
Auto temp = (Auto)ois.readObject();
System.out.println(temp);
}
}
catch(EOFException eofe){
System.out.println("End of file has been reached.");
}
catch(ClassNotFoundException cnfe){
System.out.println(cnfe.getMessage());
}
finally{
System.out.println("Closing file. . .");
ois.close();
}
}
catch(FileNotFoundException fnfe){
System.out.println("Unable to find the objects file.");
}
catch(IOException ioe){
ioe.printStackTrace();
}
}
}

本书使用两个 try/catch block 的理由是,无论如何,程序都会抛出 EOFException,因为 ObjectInputStream 类无法检查文件中是否还有更多对象(它没有与 Scanner 类提供的 hasNext() 等效的方法)。此外,一旦引发异常,在 try 中生成异常的点之后编写的任何代码都将被忽略; Java 将直接进入 catch block 来查找相关异常。因此,内部的 try/catch block 处理 EOFException,然后跳转到 finally 部分。外部的 try block 负责处理任何剩余的异常。

我的主要问题是为什么要使用 2 个 try/catch block ?看起来这是一个过于复杂的解决方案。为了确保我对此有正确的理解,我继续编写了以下代码,该代码仅使用一个 try/catch block :

public class ReadingObjects {

public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("objects");
ObjectInputStream ois = new ObjectInputStream(fis);
try{
while(true){
Auto temp = (Auto)ois.readObject();
System.out.println(temp);
}
}
catch(EOFException eofe){
System.out.println("End of file has been reached.");
}
catch(ClassNotFoundException cnfe){
System.out.println(cnfe.getMessage());
}
catch(FileNotFoundException fnfe){
System.out.println("Unable to find the objects file.");
}
catch(IOException ioe){
ioe.printStackTrace();
}
finally{
System.out.println("Closing file. . .");
ois.close();
}

}

}

使用第二个解决方案,我仍然获得与第一个(本书的)解决方案相同的输出。这样做有什么保留吗?我应该警惕在 main 方法中添加 throws 声明吗?

对此的任何澄清和意见将不胜感激。

最佳答案

这是两种不同的处理异常的技术。在第一个代码中,您使用嵌套的 try catch block ,有时可能会出现 block 的一部分可能导致一个错误而整个 block 本身可能导致另一个错误的情况。在这种情况下,必须嵌套异常处理程序。

在第二个代码中,您将 try 与多个 catch block 一起使用。两者都作为相同的输出给出,但这两种是不同的技术,仅用于处理异常。

关于java - 嵌套的 try/catch block : Two Different Implementations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34194995/

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