Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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_Try Catch - Fatal编程技术网

Java 尝试捕获给出编译错误的块

Java 尝试捕获给出编译错误的块,java,try-catch,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

我试图在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");
有人能帮忙吗。

使用:

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");
在处理异常时,在捕获子类异常之后,必须捕获更广泛的异常(超类异常,在您的情况下,异常是异常的超类)。否则,异常将被更宽的/父异常捕获块捕获,后一个代码将无法访问。因此它不会编译。

使用:

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

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

例外Hiererchy说

ONCE YOU HAVE CAUGHT AN EXCEPTION IT NEEDS NOT TO BE CAUGHT AGAIN
因为您已经在第一个catch块中捕获到异常

因此,您的下一个捕捉块是无用的

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

试试这个

try 
{ 
    // your code throwing exception
} 
catch (ArithmeticException ae) 
{
    // do something
} 
catch (Exception e) 
{
    // do something
}

希里希说

ONCE YOU HAVE CAUGHT AN EXCEPTION IT NEEDS NOT TO BE CAUGHT AGAIN
因为您已经在第一个catch块中捕获到异常

因此,您的下一个捕捉块是无用的

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

试试这个

try 
{ 
    // your code throwing exception
} 
catch (ArithmeticException ae) 
{
    // do something
} 
catch (Exception e) 
{
    // do something
}

为了澄清这个答案,这是因为一般异常捕获总是在它下面的任何内容之前被调用,所以您不应该首先捕获它(一般来说,您无论如何都不应该捕获一般异常)。编辑:偷偷摸摸的编辑!为了澄清这个答案,这是因为一般异常捕获总是在它下面的任何内容之前被调用,所以您不应该首先捕获它(一般来说,您无论如何都不应该捕获一般异常)。编辑:偷偷摸摸的编辑+1表示“一旦捕获到异常,就不需要再次捕获”行:)+1表示“一旦捕获到异常,就不需要再次捕获”行:)虽然这个问题很容易被捕获,但在将来,如果您告诉我们您收到的实际错误消息是什么,这将很有帮助。其他问题可能更复杂,如果没有错误信息,有时可能是任何人的猜测。没有人比你的编译器更了解你的代码。虽然这个问题很容易被发现,但在将来,如果你告诉我们你收到的实际错误消息是什么,这会很有帮助。其他问题可能更复杂,如果没有错误信息,有时可能是任何人的猜测。没有人比编译器更了解您的代码。