想咨詢JDK代碼異常處理,在第 120 行的ScriptEngineManager中,有未使用的輔助捕獲,ServiceConfigurationError據(jù)我所知不能拋出 try { while (itr.hasNext()) { try { ScriptEngineFactory fact = (ScriptEngineFactory) itr.next(); facList.add(fact); } catch (ServiceConfigurationError err) { System.err.println("ScriptEngineManager providers.next(): " + err.getMessage()); if (DEBUG) { err.printStackTrace(); } // one factory failed, but check other factories... continue; } } } catch (ServiceConfigurationError err) { System.err.println("ScriptEngineManager providers.hasNext(): " + err.getMessage());是否有必要進(jìn)行第二次捕獲的原因?似乎只影響while (itr.hasNext())不拋出任何異常還是如評論所述,確保方法在任何情況下都不會拋出異常只是過于謹(jǐn)慎// do not throw any exception here. 實(shí)際上 java 允許你在沒有任何錯(cuò)誤/警告的情況下復(fù)制這樣的 try-catch: try { try { ScriptEngineFactory fact = itr.next(); engineSpis.add(fact); } catch (ServiceConfigurationError err) { err.printStackTrace(); } } catch (ServiceConfigurationError err) { err.printStackTrace(); }如果我在同一次嘗試中連接捕獲,我會得到編譯錯(cuò)誤Unreachable catch block for ServiceConfigurationError. It is already handled by the catch block for ServiceConfigurationError
1 回答

阿波羅的戰(zhàn)車
TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
小誤解:第二個(gè) catch 不僅涵蓋 while 循環(huán)。它還會處理從第一個(gè) catch 塊中拋出的此類異常。
但你是對的:那個(gè) catch 塊,以及循環(huán)“header”不應(yīng)該拋出這樣的異常。簡單地迭代迭代器需要以這種方式進(jìn)行“保護(hù)”,這似乎很奇怪。
因此:當(dāng)該方法中存在其他代碼時(shí),這可能是剩余的?;蛘咚沁^度的?;蛘咦顗牡那闆r,我們看不到的代碼(創(chuàng)建迭代器)實(shí)際上會拋出那種錯(cuò)誤。如前所述,至少可以說,這將是一個(gè)奇怪且非常奇怪的設(shè)計(jì)。
添加回答
舉報(bào)
0/150
提交
取消