Java:捕获特定的异常

hey*_*sup 12 java

说我有以下内容

try{
//something
}catch(Exception generic){
//catch all
}catch(SpecificException se){
//catch specific exception only
}
Run Code Online (Sandbox Code Playgroud)

遇到SpecificException会发生什么?它首先将它作为通用异常捕获,然后捕获特定的异常吗?

或者它只捕获SpecificException而忽略通用异常.

我不希望捕获泛型和特殊化的异常.

duf*_*ymo 23

这不会编译.您将被告知无法访问特定的异常块.

您必须首先拥有更具体的异常catch块,然后是常规异常.

try
{
    //something
} 
catch(SpecificException se)
{
    //catch specific exception only
}
catch(Exception generic)
{
    //catch all
}
Run Code Online (Sandbox Code Playgroud)

  • 想象一下,我是一个富有的人,比我年轻20岁。这会有什么不同呢?想象一下您想要的一切,但这就是 JDK 的工作原理。 (3认同)

Mic*_*rdt 11

不会.所有例外情况都会被第一个区块捕获.永远不会达到第二个(编译器识别,导致由于无法访问的代码而导致错误).如果你想SpecificException特别对待,你必须反过来做:

}catch(SpecificException se){
//catch specific exception only
}catch(Exception generic){
//catch all
}
Run Code Online (Sandbox Code Playgroud)

然后SpecificException将被第一个块捕获,而所有其他块将被第二个块捕获.

  • 我不明白为什么这是公认的答案.尝试按原始问题中显示的顺序捕获异常会导致编译错误,因此声明"所有异常将被第一个块捕获"不适用. (2认同)

Boz*_*zho 6

这不能用eclipse编译器编译:

IOException的无法访问的catch块.它已由异常的catch块处理

所以用另一种方式定义它们.只会捕获特定的一个.