我正在使用ClassLoader
类,如果遇到问题则会抛出NoClassDefFoundError
。在上下文中,这实际上不是致命错误。
有没有一种很好的方法来捕获错误并抛出异常?
try{
myClassLoader.makeClass(className, classData);
}
catch(Throwable t){
log.error("Class load failed");
// throw as an Exception instead
}
这有意义吗?我不希望这是致命的,而是退出而不退货。这里的关键是我想要完整的堆栈跟踪和与NoClassDefFoundError
相关的信息。抓住错误很容易保留所有相关信息。
答案 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
,而不是Error
或Throwable
。
答案 3 :(得分:1)
一般来说,你不会抓住java.lang.Error
。
但是假设这确实是你想要做的,你可以抓住错误并抛出异常。
try {
// Error occurred
} catch(Error e){
throw new Exception("Error", e);
}