Java ScriptEngineManager格外谨慎的异常处理

Java ScriptEngineManager格外谨慎的异常处理,java,exception,try-catch,scriptengine,Java,Exception,Try Catch,Scriptengine,我想咨询一下JDK代码异常处理 在第120行中,ServiceConfigurationError有未使用的辅助捕获,据我所知,无法抛出 是否有理由需要再次捕获?它似乎只影响,而(itr.hasNext())不会引发任何异常 或者,正如所评论的那样,确保方法在任何情况下都不会抛出异常是过于谨慎了吗 实际上,java允许您复制这样的try-catch,而不会出现任何错误/警告: try { try { ScriptEngineFactory fact = itr

我想咨询一下JDK代码异常处理

在第120行中,
ServiceConfigurationError
有未使用的辅助捕获,据我所知,无法抛出

是否有理由需要再次捕获?它似乎只影响
,而(itr.hasNext())
不会引发任何异常

或者,正如所评论的那样,确保方法在任何情况下都不会抛出异常是过于谨慎了吗

实际上,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

小误解:第二个捕获不只是覆盖while循环。它还将处理从第一个catch块中抛出的此类异常

但您是对的:catch块以及循环“header”不应该引发这样的异常。简单地迭代一个迭代器就需要这样的“保护”,这似乎很奇怪


因此:当该方法中存在其他代码时,这可能是一个遗留问题。或者是太过分了。或者最坏的情况是,我们看不到的代码(创建迭代器的代码)实际上会抛出这种错误。如前所述,至少可以说,这将是一个奇怪的设计

为什么没有关于未使用渔获物的警告?如果我在同一次尝试中连接,我将得到ServiceConfigurationError的编译错误
不可访问的catch块。它已经由ServiceConfigurationError的catch块处理。
@user7294900注意:这不是异常,而是错误的一个子类。这些不是在方法签名中声明的!所以理论上,这种错误可能来自任何地方。当然,通常建议您也不要捕捉错误。
 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