1

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

有人可以帮忙吗。

4

2 回答 2

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");

在处理异常时,必须在捕获子类异常后捕获更广泛的异常(超类异常,在您的情况下 Exception 是 ArthmeticException 的超类)。否则,异常将被更广泛/父异常捕获块捕获,并且后面的代码将无法访问。所以它不会编译。

于 2013-10-28T14:06:11.687 回答
4

异常层次结构说

ONCE YOU HAVE CAUGHT AN EXCEPTION IT NEEDS NOT TO BE CAUGHT AGAIN

因为您已经在第一个 catch 块中捕获了异常

因此你的下一个 catch 块是无用的

您应该首先捕获子类,然后对于其余可能的其他异常应该捕获父异常类

尝试这个

try 
{ 
    // your code throwing exception
} 
catch (ArithmeticException ae) 
{
    // do something
} 
catch (Exception e) 
{
    // do something
}
于 2013-10-28T14:09:33.433 回答