在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".
}
答案 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.