【发布时间】:2013-10-24 15:10:30
【问题描述】:
对于在try/catch 块中放入多少代码是否有“最佳实践”?
我在下面发布了 3 个不同的场景。
我没有在每个 catch 块中包含行为,也没有包含 finally 块。这是为了提高观众的可读性。假设每个catch 做不同的事情。并假设finally 将关闭流。只是想为未来的读者创建一个易于阅读的示例。
- 控制,没有
try/catch。 - 每个需要的地方都用 1 个
try/catch编码。 - 整个代码块周围只有 1 个
try/catch的代码。
公认的最佳做法是什么?为什么?
场景 1
没有try/catch的代码,只是为了控制。
BufferedReader bufferedReader = new BufferedReader(new FileReader("somepath"));
String line;
while ((line = bufferedReader.readLine()) != null) {
Object object = new Object();
this.doSomething(object);
}
bufferedReader.close();
场景 2
每个需要的地方都带有try/catch 块的代码。
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new FileReader("somepath"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String line;
try {
while ((line = bufferedReader.readLine()) != null) {
Object object = new Object();
this.doSomething(object);
}
} catch (IOException e) {
e.printStackTrace();
}
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
场景 3
代码用 1 try/catch 包围整个代码块。
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader("somepath"));
String line;
while ((line = bufferedReader.readLine()) != null) {
Object object = new Object();
this.doSomething(object);
}
bufferedReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
【问题讨论】:
-
我认为最好为要捕获的异常放置一个 try 语句和多个捕获。更好的可读性。
-
在场景 1 中,您是指方法本身在哪里
throws IOException -
@Vallentin
Scenario 1只是为了控制,基本无视。我只是想显示没有try/catch块的代码。 -
@AliAlamiri 我同意
Scenario 3更容易阅读,但这是唯一的原因吗? -
@prolink007 部分最佳实践与可读性有关。还有其他因素,这取决于代码本身和正在使用的内容(我的观点)。例如,场景 3 在其他场景中可能效果不佳。