try-catch块给出编译错误

时间:2013-10-28 14:05:48

标签: java try-catch

我试图在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");

请有人帮忙吗。

2 个答案:

答案 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
}