我编写了如下函数,在try块中我抛出IOException,它由下一个catch块处理并再次抛出FileNotFoundException,在finally块中我再次抛出NULLPointerException。所以我的问题是FileNotFOundException异常是未处理的异常? 为什么调用函数只获取NULLPointerException,虽然FileNotFounException未处理(我假设的是什么)?
static void fun(){
try{
throw new IOException();
}
catch(IOException e){
throw new FileNotFoundException();
}
finally{
throw new NullPointerException();
}
}
答案 0 :(得分:0)
除非您将旧的异常包装在新的异常中,否则您一次只能抛出一个异常。最后是最后一场胜利。
由于您显然没有发布工作代码,但代码旨在探索此问题并展示行为,因此我不会打扰您。我将向您介绍一些代码,以解决此问题后面的一个非常现实的问题。
当你尝试在finally中关闭某些东西并且close方法本身抛出异常时会出现问题。您最终需要second try。
答案 1 :(得分:0)
您没有正确使用finally
声明。
当try块退出时,finally块始终执行。这确保即使发生意外异常也会执行finally块。但最终不仅仅是异常处理有用 - 它允许程序员避免因返回,继续或中断而意外绕过清理代码。将清理代码放在finally块中总是一种很好的做法,即使没有预期的例外情况也是如此。
所以,是的,你确实有一个未处理的异常。如果你试图处理多个错误,我会抛出异常,而不是像这样使用try/catch
:
static void fun() throws FileNotFoundException, NullPointerException{
//your code here
}
然后当你调用方法时,你可以在try / catch中包围它:
try{
YourClass.fun();
}catch(Exception e){
//handle the error.
}finally{
//clean up code, this is optional
}
答案 2 :(得分:-1)
是的,FileNotFoundException
未处理。要处理它,请使用另一个trycatch块包围fun()
。
try{
fun();
catch(FileNotFoundException ex){
}
catch(NullPointerException ex){
}