Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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 - Fatal编程技术网

Java 捕获错误以引发异常

Java 捕获错误以引发异常,java,Java,我正在使用ClassLoader类,如果出现问题,它会抛出NoClassDefFoundError。在上下文中,这实际上不是一个致命错误 是否有一种捕获错误并作为异常抛出的好方法 try{ myClassLoader.makeClass(className, classData); } catch(Throwable t){ log.error("Class load failed"); // throw as an Exception instead } 这有意义吗?

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

是否有一种捕获错误并作为异常抛出的好方法

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

这有意义吗?我不希望这是致命的,而只是退出而不返回。这里的关键是我想要完整的堆栈跟踪和与
NoClassDefFoundError
相关的信息。捕获错误很简单,保留所有相关信息则更难。

您可以捕获异常并很容易地抛出新的异常

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

您可以捕获异常并很容易地抛出新异常

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

再加上@bwfcwalshy的答案,我们永远不会发现Java程序中的错误。考虑一个程序内存不足的情况,在这种情况下,将抛出<代码> OutOfMeMyRebug < /代码>。如果我们有catch块来捕获
错误
(或
Throwable
),它将捕获该错误,但没有内存来执行任何操作,从而导致该错误被抑制


我们应该总是捕捉到
异常
,而不是
错误
可丢弃的

再加上@bwfcwalsh的答案,我们不应该捕捉Java程序中的错误。考虑一个程序内存不足的情况,在这种情况下,将抛出<代码> OutOfMeMyRebug < /代码>。如果我们有catch块来捕获
错误
(或
Throwable
),它将捕获该错误,但没有内存来执行任何操作,从而导致该错误被抑制

throw new Exception("message", t);
我们应该始终捕捉
异常
,而不是
错误
可丢弃的

throw new Exception("message", t);
它是可以扔掉的


t是可丢弃的

一般来说,您不会捕捉到
java.lang.Error

但是假设这确实是您想要做的,您可以捕获错误并抛出异常

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

一般来说,您不会捕捉到
java.lang.Error

但是假设这确实是您想要做的,您可以捕获错误并抛出异常

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

你的意思是像catch(NoClassDefFoundError dfe)?别忘了语法。(乍一看,您似乎缺少2个分号)@Ascalonian有没有一种好方法可以在不丢失任何信息的情况下将错误转换为异常?关于
catch(NoClassDefFoundError e){throw new Exception(“类加载失败”,e);}
?@bobbel blah没有看到第二个构造函数与throwable异常。你是说像catch(NoClassDefFoundError dfe)?别忘了语法。(乍一看,您似乎缺少2个分号)@Ascalonian有没有一种好方法可以在不丢失任何信息的情况下将错误转换为异常?关于
catch(NoClassDefFoundError e){throw new Exception(“类加载失败”,e);}
?@bobbel blah没有看到第二个构造函数与throwable异常。这太愚蠢了。这里的问题是错误类型和异常之间的区别。我正在尝试将错误转换为异常,我知道如何处理ClassNotFoundException这里的问题是错误类型和异常之间的区别。我正在尝试将错误转换为异常,我知道如何处理ClassNotFoundException这是一个错误问题的正确答案。谢谢。这是一个糟糕问题的正确答案。谢谢