gpt4 book ai didi

Java 扫描器良好实践

转载 作者:行者123 更新时间:2023-11-29 10:03:25 25 4
gpt4 key购买 nike

我正在读取一个文件,我想使用 try/catch block 来处理异常。我写了我的代码。但是,eclipse 在声明我的扫描仪对象时给了我一个错误,我不得不将它初始化为 null。下面我写了两个版本的代码。哪个被认为是更好的做法?另外,使用 try/catch block 是否比在构造函数/函数头的末尾抛出异常更好?

代码版本#1:

java.util.Scanner in = null;

try {
in = new java.util.Scanner (f);
/* use scanner */
} catch (FileNotFoundException e) {
System.err.println("File was not found. Make sure the file exist.");
System.err.println("Message: " + e.getMessage());
} catch (IOException e) {
System.err.println("File could not be opened.");
System.err.println("Message: " + e.getMessage());
} finally {
in.close();
}

代码版本#2:

try {
java.util.Scanner in = new java.util.Scanner (f);
/* use scanner */
in.close();
} catch (FileNotFoundException e) {
System.err.println("File was not found. Make sure the file exist.");
System.err.println("Message: " + e.getMessage());
} catch (IOException e) {
System.err.println("File could not be opened.");
System.err.println("Message: " + e.getMessage());
}

最佳答案

没有一个片段是正确的。如果 Scanner 构造函数抛出异常,第一个将导致 NullPointerException,因为它在调用 close() 之前不检查 null。

如果 try block 中出现任何异常,第二个将无法关闭扫描器。

显然,第一个比第二个更接近正确的代码。

关于异常(exception)情况最好的是什么,这是一个正确性问题。如果该方法能够正确处理异常(这意味着程序将在异常处理后继续按预期工作),它应该捕获它。如果不能,它应该将其传播给调用者并让它处理。

关于Java 扫描器良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16120480/

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