plsql如何执行单个语句_在单个try-with-resources语句中仔细指定多个资源
plsql如何執(zhí)行單個語句
Java 7最有用的新功能之一是引入了try-with-resources語句 [AKA 自動資源管理 ( ARM )]。 try-with-resources語句的吸引力在于它承諾 “確保在語句末尾關(guān)閉每個資源”。 在這種情況下,“資源”是實(shí)現(xiàn)AutoCloseable及其close()方法并在try-with-resources語句的“ try”子句中實(shí)例化的任何類。
Java語言規(guī)范 [JLS]在14.20.3節(jié) (在這種情況下為Java SE 10 JLS )中詳細(xì)描述了try-with-resource語句 。 JLS聲明“ try -with-resources語句是使用局部變量(稱為resources )進(jìn)行參數(shù)化的,這些局部變量在try塊執(zhí)行之前進(jìn)行了初始化,并在執(zhí)行try之后以與初始化時相反的順序自動關(guān)閉塊。”
JLS明確指定可以相對于單個try -with-resources語句定義多個資源,并且它指定如何指定多個資源。 具體地說,它表明try可以跟隨一個“ ResourceSpecification ,其由一個”的“ ResourceList ,其由一個或多個“的” 資源 “秒。 當(dāng)聲明的資源多于一個時,多個資源用分號( ; )分隔。 用分號分隔的列表指定多個資源非常重要,因?yàn)閠ry -with-resources語句將不支持(不會自動關(guān)閉)未以此方式聲明的任何候選資源。
在try -with-resources語句中指定多個資源時,最可能的錯誤源是“嵌套”“資源”的實(shí)例化,而不是顯式地實(shí)例化每個變量的局部變量,而在每個實(shí)例化之間不使用分號。 以下示例將說明差異。
接下來顯示兩個荒謬但說明性的類。 每個類都實(shí)現(xiàn)AutoCloseable ,因此可以與try -with-resources結(jié)合使用,并且在與try -with-resources語句正確使用時將自動調(diào)用其close()方法。 命名它們以反映可以使用InnerResource的實(shí)例實(shí)例化OuterResource 。
InnerResource.java
package dustin.examples.exceptions;import static java.lang.System.out;public class InnerResource implements AutoCloseable {public InnerResource(){out.println("InnerResource created.");}public InnerResource(final RuntimeException exceptionToThrow){throw exceptionToThrow != null? exceptionToThrow: new RuntimeException("InnerResource: No exception provided.");}@Overridepublic void close() throws Exception{out.println("InnerResource closed.");}@Overridepublic String toString(){return "InnerResource";} }OuterResource.java
package dustin.examples.exceptions;import static java.lang.System.out;public class OuterResource implements AutoCloseable {private final InnerResource wrappedInnerResource;public OuterResource(final InnerResource newInnerResource){out.println("OuterResource created.");wrappedInnerResource = newInnerResource;}public OuterResource(final InnerResource newInnerResource,final RuntimeException exceptionToThrow){wrappedInnerResource = newInnerResource;throw exceptionToThrow != null? exceptionToThrow: new RuntimeException("OuterResource: No exception provided.");}@Overridepublic void close() throws Exception{out.println("OuterResource closed.");}@Overridepublic String toString(){return "OuterResource";} }現(xiàn)在,可以使用剛剛定義的兩個類來證明在用分號分隔的列表中的同一try -with-resources語句中正確聲明每個實(shí)例的實(shí)例與在外部資源的構(gòu)造函數(shù)中錯誤地嵌套內(nèi)部資源的實(shí)例之間的區(qū)別。 后一種方法效果不理想,因?yàn)榫驼{(diào)用其AutoCloseable.close()方法而言,沒有本地定義變量的內(nèi)部資源不會被視為“資源”。
下一個代碼清單演示了在try -with-resources語句中實(shí)例化“資源”的錯誤方法。
在try -with-resources語句中實(shí)例化資源的錯誤方法
try (OuterResource outer = new OuterResource(new InnerResource(), new RuntimeException("OUTER"))) {out.println(outer); } catch (Exception exception) {out.println("ERROR: " + exception); }執(zhí)行上述代碼后,輸出“ InnerResource created”。 可以看到,但是從未顯示與資源關(guān)閉相關(guān)的輸出。 這是因?yàn)镮nnerResource的實(shí)例是在對OuterResource類的構(gòu)造函數(shù)的調(diào)用中實(shí)例化的,并且從未在try -with-resource語句的資源列表中分配給其自己的單獨(dú)變量。 對于真正的資源,這意味著資源沒有正確關(guān)閉。
下一個代碼清單演示了在try -with-resources語句中實(shí)例化“資源”的正確方法。
在try -with-resources語句中實(shí)例化資源的正確方法
try(InnerResource inner = new InnerResource();OuterResource outer = new OuterResource(inner, new RuntimeException("OUTER"))) {out.println(outer); } catch (Exception exception) {out.println("ERROR: " + exception); }當(dāng)執(zhí)行上面緊接的代碼時,輸??出將包括“ InnerResource created”。 并且“ InnerResource已關(guān)閉。” 因?yàn)镮nnerResource實(shí)例已在try -with-resources語句中正確分配給變量,因此即使實(shí)例化期間發(fā)生異常,也將正確調(diào)用其close()方法。
Java教程的try-with-resources語句部分包括幾個示例,這些示例正確地將try -with-resources中的資源指定為以分號分隔的單個變量定義。 一個示例通過java.util.zip.ZipFile和java.io.BufferedWriter展示了這種正確的方法,而另一個示例通過java.sql.Statement和java.sql.ResultSet的實(shí)例展示了這種正確的方法。
在JDK 7中引入try -with-resources是對該語言的一種受歡迎的補(bǔ)充,它使Java開發(fā)人員可以更輕松地編寫不太可能泄漏或浪費(fèi)資源的資源安全的應(yīng)用程序。 但是,當(dāng)在單個try -with-resources語句中聲明多個資源時,重要的是要確保每個資源都單獨(dú)實(shí)例化并分配給在try的資源說明符列表中聲明的自己的變量,以確保每個資源都是正確關(guān)閉。 一種快速的檢查方法是確保對于try指定的n個 AutoCloseable實(shí)現(xiàn)資源,應(yīng)該有n-1個分號來分隔這些實(shí)例化的資源。
翻譯自: https://www.javacodegeeks.com/2018/08/carefully-specify-multiple-resources.html
plsql如何執(zhí)行單個語句
總結(jié)
以上是生活随笔為你收集整理的plsql如何执行单个语句_在单个try-with-resources语句中仔细指定多个资源的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不停机与停机更新_Istio的零停机滚动
- 下一篇: 三点水加宗读什么 淙的读音及释义