捕获异常抛出错误

时间:2016-03-01 15:15:25

标签: java

我正在使用ClassLoader类,如果遇到问题则会抛出NoClassDefFoundError。在上下文中,这实际上不是致命错误。

有没有一种很好的方法来捕获错误并抛出异常?

try{
    myClassLoader.makeClass(className, classData);
}
catch(Throwable t){
    log.error("Class load failed");
    // throw as an Exception instead
}

这有意义吗?我不希望这是致命的,而是退出而不退货。这里的关键是我想要完整的堆栈跟踪和与NoClassDefFoundError相关的信息。抓住错误很容易保留所有相关信息。

4 个答案:

答案 0 :(得分:3)

throw new Exception("message", t);

t是Throwable

答案 1 :(得分:1)

你可以很容易地抓住异常并抛出一个新异常。

try{
    myClassLoader.makeClass(className, classData);
}catch(ClassNotFoundException err){
    throw new Exception("Oh no! An error occurred!");
}

答案 2 :(得分:1)

添加到@ bwfcwalshy的答案,我们永远不应该在Java程序中捕获错误。考虑程序内存不足的情况,在这种情况下,将抛出OutOfMemoryError。如果我们有catch块来捕获Error(或Throwable),它将捕获该错误但没有内存来执行任何操作,导致该错误被抑制。

我们应始终抓住Exception,而不是ErrorThrowable

答案 3 :(得分:1)

一般来说,你不会抓住java.lang.Error

但是假设这确实是你想要做的,你可以抓住错误并抛出异常。

try {
  // Error occurred
} catch(Error e){
  throw new Exception("Error", e);
}