try-with-resource
构造的优先规则是什么?这是一个例子(注意:所有提到的类都实现了Closeable
):
try (Page closeablePage = page;
PipedOutputStream out = outs;
SequenceWriter sequenceWriter = mapper.writer().writeValuesAsArray(out)) {
// do stuff
} finally {
callback.run();
}
回调什么时候开始?我的假设是:
SequenceWriter
PipedOutputStream
Page
我错了吗?
答案 0 :(得分:7)
location / {
if (-e $request_filename.php){
rewrite ^/(.*)$ /$1.php;
}
}
location ~ \.php$ {
if ($request_uri ~ ^/([^?]*)\.php(\?.*)?$) {
return 302 /$1$2;
}
fastcgi_...
}
块将在finally
语句关闭所有资源后运行。
这是在JLS section 14.20.3.2中指定的,引用:
此外,在执行finally块时,所有资源都将被关闭(或尝试关闭),与finally关键字的意图保持一致。
此外,所有资源都以反向声明顺序关闭。引用section 14.20.3(强调我的):
资源以与初始化时相反的顺序关闭。仅当资源初始化为非空值时才关闭资源。关闭一个资源的例外不会阻止关闭其他资源。如果先前由初始化程序,try块或资源关闭抛出异常,则会抑制此类异常。
这意味着您的假设是正确的。