“异常”是否捕获异常,即使catch块中特别提到了异常?

时间:2015-05-26 20:45:45

标签: java exception

catch(TimeoutException e)
    {
        //something here
    }
catch(SomeOtherException e)
    {
        //something here
    }
catch(NullPointerException e)
    {
        //something here
    }
catch(Exception excep)
    {
        //something here
    }

我的问题是,如果存在NullPointerException,它将被nullpointerexception catch块捕获。它是否也会被异常捕获块捕获?我可以使用excep变量来获取异常类型吗?

1 个答案:

答案 0 :(得分:3)

不,因为在catch (Exception excep)区块之上,您有一个专门捕获NullPointerException的区块。

多个catch块*永远不会捕获异常。

如果删除catch (NullPointerException e)阻止,那么catch (Exception excep)阻止 也将<{1}}捕获(因为NullPointerExceptionNullPointerException的子类1}})。在这种情况下,您可以使用Exception变量来检查异常的类型。然而,这将是不好的做法 - 为特定的异常类型添加一个catch块更好,而不是测试异常变量的类型。

*:除非在excep区块内,你重新抛出异常,正如Juan Mendes在评论中提到的那样。