针对多个异常的Catch处理程序?

时间:2014-06-15 20:07:58

标签: java exception error-handling

我正在试验异常,我想询问何时可以在一个处理程序中处理多个异常,何时不处理?

例如,我编写了以下代码,它结合了两个异常( FileNotFoundException OutOfMemoryError ),程序运行正常,没有任何错误。 Al认为处理与我选择它们的代码的功能不太相关,只是为了看看我何时可以在处理程序中组合多个异常:

import java.io.FileNotFoundException;
import java.lang.OutOfMemoryError;

public class exceptionTest {
    public static void main(String[] args) throws Exception {
        int help = 5;

        try {
            foo(help);
        } catch (FileNotFoundException | OutOfMemoryError e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static boolean foo(int var) throws Exception {
        if (var > 6)
            throw new Exception("You variable bigger than 6");
        else
            return true;
    }
}

但是当我选择不同类型的异常时,编译器会给我错误。例如,当我选择IOException和Exception时,我有错误,已经处理了异常" :

import java.io.IOException;
import java.lang.Exception;



public class exceptionTest {
    public static void main(String[] args) throws Exception {
        int help = 5;

        try {
            foo(help);
        } catch (IOException | Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static boolean foo(int var) throws Exception {
        if (var > 6)
            throw new Exception("You variable bigger than 6");
        else
            return true;
    }

}

那为什么会这样呢?为什么有一次我可以在处理程序中使用多个异常而在另一种情况下不能使用提前谢谢。

1 个答案:

答案 0 :(得分:1)

您收到的消息是因为IOExceptionException的子类。因此,如果抛出IOException,它将被catch (Exception e)语句捕获,因此将其作为IOException捕获是多余的。
第一个示例有效,因为FileNotFoundExceptionOutOfMemoryError都不是另一个的子类。

但是,您可以使用单独的catch语句捕获子类别异常:

try{
    // code that might throw IOException or another Exception
} catch (IOException e) {
    // code here will execute if an IOException is thrown
} catch (Exception e) {
    // code here will execute with an Exception that is not an IOException
}

如果你这样做,请注意子类必须先出现。