我试图在try-catch块中添加一些代码,但是在编译时失败了,我没有弄错。
try
{
int x = 0;
int y = 5 / x;
}
catch (Exception e)
{
System.out.println("Exception");
}
catch (ArithmeticException ae)
{
System.out.println(" Arithmetic Exception");
}
System.out.println("finished");
请有人帮忙吗。
答案 0 :(得分:8)
使用:
try
{
int x = 0;
int y = 5 / x;
}
catch (ArithmeticException ae)
{
System.out.println(" Arithmetic Exception");
}
catch (Exception e)
{
System.out.println("Exception");
}
System.out.println("finished");
在处理异常时,必须在捕获子类异常后捕获更广泛的异常(超类异常,在你的情况下,异常是ArthmeticException的超类)。否则,异常将被更宽/父异常catch块捕获,后面的代码将无法访问。所以它不会编译。
答案 1 :(得分:4)
例外hierearchy说
ONCE YOU HAVE CAUGHT AN EXCEPTION IT NEEDS NOT TO BE CAUGHT AGAIN
因为您已经在第一个catch块中捕获了Exception
因此你的下一个捕获块是没用的
你应该首先捕获子类,然后对于剩下的可能的其他异常应该捕获父Exception类
试试这个
try
{
// your code throwing exception
}
catch (ArithmeticException ae)
{
// do something
}
catch (Exception e)
{
// do something
}