想咨询JDK代码异常处理,在第 120 行的ScriptEngineManager中,有未使用的辅助捕获,ServiceConfigurationError据我所知不能抛出 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());是否有必要进行第二次捕获的原因?似乎只影响while (itr.hasNext())不抛出任何异常还是如评论所述,确保方法在任何情况下都不会抛出异常只是过于谨慎// do not throw any exception here. 实际上 java 允许你在没有任何错误/警告的情况下复制这样的 try-catch: try { try { ScriptEngineFactory fact = itr.next(); engineSpis.add(fact); } catch (ServiceConfigurationError err) { err.printStackTrace(); } } catch (ServiceConfigurationError err) { err.printStackTrace(); }如果我在同一次尝试中连接捕获,我会得到编译错误Unreachable catch block for ServiceConfigurationError. It is already handled by the catch block for ServiceConfigurationError
1 回答
阿波罗的战车
TA贡献1862条经验 获得超6个赞
小误解:第二个 catch 不仅涵盖 while 循环。它还会处理从第一个 catch 块中抛出的此类异常。
但你是对的:那个 catch 块,以及循环“header”不应该抛出这样的异常。简单地迭代迭代器需要以这种方式进行“保护”,这似乎很奇怪。
因此:当该方法中存在其他代码时,这可能是剩余的。或者它是过度的。或者最坏的情况,我们看不到的代码(创建迭代器)实际上会抛出那种错误。如前所述,至少可以说,这将是一个奇怪且非常奇怪的设计。
添加回答
举报
0/150
提交
取消