Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 捕获未抛出的已检查异常_Java_Try Catch_Classnotfoundexception - Fatal编程技术网

Java 捕获未抛出的已检查异常

Java 捕获未抛出的已检查异常,java,try-catch,classnotfoundexception,Java,Try Catch,Classnotfoundexception,我有一个通过EJB调用外部API的代码,该API偶尔会泄漏一个不属于客户端工具包的异常,因此导致ClassNotFoundException 我在呼叫周围有一个try-catch块: try { thirdPartyLibrary.finalInvokeMethod(); } catch (SomeException exception) { //Do something } catch( .. } catch (Exception

我有一个通过EJB调用外部API的代码,该API偶尔会泄漏一个不属于客户端工具包的异常,因此导致
ClassNotFoundException

我在呼叫周围有一个try-catch块:

    try {
      thirdPartyLibrary.finalInvokeMethod();
    } catch (SomeException exception) {
      //Do something
    } catch(
    ..
    } catch (Exception exception) {
      if (exception instanceof ClassNotFoundException) {
         log.error("....");
      }
    }
我想避免在catch中使用instanceof,但是如果我为
ClassNotFoundException
添加一个单独的catch子句,编译器会生成一个错误“Unreachable catch block”,因为
thirdPartyLibrary.finalInvokeMethod()不会抛出
ClassNotFoundException


有没有更好的方法来解决这个问题?

我找到了一个解决办法。我已经包装了
thirdPartyLibrary.finalInvokeMethod()。所以我得到了一个没有编译器错误的专用catch子句

private someMethod() {
  try {
    callExternalAPI();
  } catch (SomeException exception) {
    //Do something
  } catch(
  ..
  } catch (ClassNotFoundException exception) {
    log.error("....");
    //Do something
  } catch (Exception exception) {
    //Do something
  }
}

private void callExternalAPI() throws ClassNotFoundException {
  thirdPartyLibrary.finalInvokeMethod();
}

如果方法为第三方库.finalInvokeMethod();没有给出ClassNotFoundException,它怎么能捕获ClassNotFoundException??问题可能在另一个地方。我认为您混淆了
ClassNotFoundException
noclassdefounderror
。如果你想捕获后者,你可以为它创建一个没有任何编译错误的catch块。RMI机制通过反射和反序列化从外部API重建reply,因此它抛出
ClassNotFoundException
,以防类路径中没有泄漏的异常。(因此我不会混淆
ClassNotFoundException
NoClassDefFoundError
)@Cyrex如果
finalInvokeMethod
声明抛出一个超类
ClassNotFoundException
(例如,
public void finalInvokeMethod()抛出异常
),就会发生这种情况但是在内部实际上抛出了一个
ClassNotFoundException
的实例。