3 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊
這在 JLS?14.20.3.2 Extended try-with-resources中有解釋:
擴(kuò)展的 try-with-resources 語句的含義:
try?ResourceSpecification ????Block Catchesopt Finallyopt
由嵌套在 try-catch 或 try-finally 或 try-catch-finally 語句中的基本 try-with-resources 語句 (§14.20.3.1) 的以下翻譯給出:
try?{????try?ResourceSpecification ????????Block } Catchesopt Finallyopt
翻譯的效果是將 ResourceSpecification 放在 try 語句“內(nèi)部”。這允許擴(kuò)展的 try-with-resources 語句的 catch 子句捕獲由于任何資源的自動(dòng)初始化或關(guān)閉而引起的異常。
此外,在執(zhí)行 finally 塊時(shí),所有資源都已關(guān)閉(或試圖關(guān)閉),這與 finally 關(guān)鍵字的意圖保持一致。

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊
當(dāng)您使用 try with resources(我的意思是try (...) {...
)時(shí),Java 編譯器會(huì)生成額外的代碼部分來顯示來自 type 的局部變量的堆棧跟蹤Throwable
。這是因?yàn)?Java 編譯器正在將 try with resources 語句分解為單獨(dú)的嘗試 - 一個(gè)用于關(guān)閉資源,另一個(gè)用于try
.
反編譯后如何顯示 - 這取決于您使用的反編譯器。

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊
對(duì)于它的價(jià)值 -實(shí)際字節(jié)碼與輸入的相似性要小得多 - 嘗試將 cfr 與參數(shù)一起使用
--tryresources false --decodefinally false
你得到了未加糖的代碼,它更接近實(shí)際的字節(jié)碼。
? ? public static void main(String[] args) {
? ? String zipPath = "D:/test";
? ? try {
? ? ? ? ZipOutputStream zipOut;
? ? ? ? block11 : {
? ? ? ? ? ? zipOut = new ZipOutputStream(new FileOutputStream(zipPath));
? ? ? ? ? ? Throwable throwable = null;
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? String Hello2332 = "Hello";
? ? ? ? ? ? ? ? System.out.println("==============>" + Hello2332);
? ? ? ? ? ? ? ? if (zipOut == null) return;
? ? ? ? ? ? ? ? if (throwable == null) break block11;
? ? ? ? ? ? }
? ? ? ? ? ? catch (Throwable Hello2332) {
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? throwable = Hello2332;
? ? ? ? ? ? ? ? ? ? throw Hello2332;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? catch (Throwable throwable2) {
? ? ? ? ? ? ? ? ? ? if (zipOut == null) throw throwable2;
? ? ? ? ? ? ? ? ? ? if (throwable == null) {
? ? ? ? ? ? ? ? ? ? ? ? zipOut.close();
? ? ? ? ? ? ? ? ? ? ? ? throw throwable2;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ? ? zipOut.close();
? ? ? ? ? ? ? ? ? ? ? ? throw throwable2;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? catch (Throwable throwable3) {
? ? ? ? ? ? ? ? ? ? ? ? throwable.addSuppressed(throwable3);
? ? ? ? ? ? ? ? ? ? ? ? throw throwable2;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? zipOut.close();
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }
? ? ? ? ? ? catch (Throwable Hello2332) {
? ? ? ? ? ? ? ? throwable.addSuppressed(Hello2332);
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? zipOut.close();
? ? ? ? return;
? ? }
? ? catch (Exception e) {
? ? ? ? e.printStackTrace();
? ? }
}
添加回答
舉報(bào)