在Java 7中尝试使用资源?

时间:2011-07-13 03:07:22

标签: java-7 try-with-resources

在Java 7中新的Try-with-Resources语法中,我是否需要担心资源的顺序?

try (InputStream in = loadInput(...); // <--- can these be in any order?
     OutputStream out = createOutput(...) ){
    copy(in, out);
}
catch (Exception e) {
    // Problem reading and writing streams.
    // Or problem opening one of them.
    // If compound error closing streams occurs, it will be recorded on this exception 
    // as a "suppressedException".
} 

4 个答案:

答案 0 :(得分:7)

当且仅当使用正常的try {create resources} finally {close resources}语法时,顺序才有意义。首先获得的资源将最后关闭。有关详细信息,请参阅the technotes

答案 1 :(得分:1)

在您的示例中,顺序绝对无关紧要。您只能在try块中使用资源,而两者都已可用。 如果您要连接到数据库,则订单或开店事宜很重要,但是我将创建一个单独的方法来解决这一问题。此方法需要实现AutoClosable和覆盖的方法关闭()。尽管close()会引发异常,但是您的方法不必如此。

答案 2 :(得分:0)

实际上订单根本不重要。理想情况下,如果资源不相关,您可以按任何顺序打开它们,并且可以按任何顺序关闭它们。

如果资源是相关的,你必须按照命令创建它们,例如首先创建Connection然后是PreparedStatement,我没有任何证据,但我认为java以FIFO顺序关闭资源以避免任何依赖性问题。 / p>

答案 3 :(得分:0)

资源的开放取决于另一个被打开的资源是否重要。例如,如果B的开口要求打开A,那么你很明显要先打开A。需要注意的另一件事是资源按照打开的相反顺序关闭。例如,如果您打开A然后打开B,那么当try-with-resources关闭它们时,首先关闭B,然后关闭A.