【发布时间】:2019-05-26 12:49:26
【问题描述】:
想咨询一下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
【问题讨论】:
标签: java exception try-catch scriptengine