gpt4 book ai didi

java - 正确的 try catch 设计

转载 作者:搜寻专家 更新时间:2023-11-01 03:25:23 24 4
gpt4 key购买 nike

对于在 Java 中实现 try/catch,哪个被认为是更合适的技术:

答:

Date lastMod = null;
BufferedReader inFile = null;
try {
inFile = new BufferedReader(new FileReader("C:\\Java\\settings.ini"));
try {
lastMod = new Date(Long.parseLong(inFile.readLine()));
} catch (IOException e) {
e.printStackTrace();
}
} catch(FileNotFoundException e) {
e.printStackTrace();
}

或乙:

Date lastMod = null;
BufferedReader inFile = null;
try {
inFile = new BufferedReader(new FileReader("C:\\Java\\settings.ini"));
lastMod = new Date(Long.parseLong(inFile.readLine()));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

另外,在 try/catch block 后面放一长段使用 BufferedReader 的代码是错误的,还是最好将长代码块包含在 try/catch 中?

例如:

public static void main(String[] args) {
Date lastMod = null;
BufferedReader inFile = null;
try {
inFile = new BufferedReader(new FileReader("C:\\Java\\settings.ini"));
lastMod = new Date(Long.parseLong(inFile.readLine()));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//Long block of code using inFile
inFile.readLine();
inFile.close();

对比:

public static void main(String[] args) {
Date lastMod = null;
BufferedReader inFile = null;
try {
inFile = new BufferedReader(new FileReader("C:\\Java\\settings.ini"));
lastMod = new Date(Long.parseLong(inFile.readLine()));
//Long block of code using inFile
inFile.readLine();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
inFile.close();
}

最佳答案

当内部 try block 之后、外部 try block 之前没有任何内容发生时,B 的可读性更高。如果你有逻辑要在两者之间执行,那么你必须使用 A

在第二个示例中,使用 finally 的第二个版本对于确保无论如何都会调用 close 至关重要(即使函数首先返回)第一个没有 finally 的版本实际上是错误的,因为您可能会用完所有文件句柄并且无法打开更多文件。

作为附加说明,您可能需要在调用 close 时检查是否为 null。如果您使用的是 Java 7,那么使用 "try with resources" 会更好。 .

关于java - 正确的 try catch 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15286662/

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