使用try catch finally块时组织java代码

时间:2013-03-09 04:50:31

标签: java coding-style try-catch

我是一个java新手。我有一个关于如何在使用try catch finally块时组织java代码的问题。假设我必须阅读一些文本文件并对存储的文件内容进行一些计算。我的代码应该怎么样?

例如

代码1看起来像:

public static void main(String[] args){

try{

//open files using BufferedReader, read and store the file contents.

}catch(IOException e){

e.printStackTrace();

}
finally{

//close the files

}
// do computations on the data
}

代码2看起来像:

public static void main(String[] args){

try{

//open files using BufferedReader, read and store the file contents.

// do computations on the data

}catch(IOException e){

e.printStackTrace();

}
finally{

//close the files

}
}

这两个中哪一个是更好的编码习惯?也应该最后阻止放置 尝试捕捉或它可以放在最后。

5 个答案:

答案 0 :(得分:2)

使用Java 7并尝试使用资源。

try(Connection = pool.getConnection()) { // or any resource you open, like files
// ...

} // auto closes

此功能几乎已弃用finally - 一旦添加此功能,我个人未找到finally的用例,建议您避免使用此功能。就函数式编程而言,它就像goto或可论证的continue,甚至是for循环 - 更新的功能使得使用不必要。

答案 1 :(得分:1)

最后块应该在try-catch之后放置。你想在哪里做数据的计算取决于你...但是如果你把它放在try-catch块之后,它将尝试计算,即使抛出异常,除非你使用一个条件。

答案 2 :(得分:0)

应该使用第二种方法,因为它可以更容易地对数据进行计算而不会遇到可变范围问题。但是,根据需要完成的计算,两种方式都可以工作。

答案 3 :(得分:0)

第二个。

有异常的想法是将它们抛出到检测到问题的位置,并且它们不会早于早期问题不再影响代码执行的第一点。可能通过在catch块中进行一些处理并使用finally块进行一些清理。

在第一个代码示例中,catch之后的代码仍然受到导致异常的错误的影响。所以你早就抓住了它。这意味着您可能需要在其周围添加if语句,这会不必要地增加函数的复杂性。

答案 4 :(得分:0)

这取决于您的系统细节,我看到两种可能的情况:

1)文件很大。然后你不能把它加载到memmory。你应该逐个阅读文件的pices,并在每个pice上做你的逻辑。这样可以防止你耗尽memmory。

2)文件很小。然后你可以选择,跟随第一个案例或读取memmory中的文件,关闭它然后处理它。

还有一个考虑因素:当文件未关闭时,其他进程无法访问它。如果您的逻辑很长,那么这可能是一个问题,在这种情况下,首先读取和关闭文件会更好。