如何为Checked Exceptions传播try catch块?

时间:2012-05-03 17:57:53

标签: java exception

我对Java Exceptions有基本疑问

即,所有已检查的异常都从Exception类延伸,未经检查的异常从RuntimeException延伸。但运行时异常也从Exception延伸。

但是为什么要使用已选中的try传播catch ... Exceptions阻止,而不是在未选中的例外中传播?

3 个答案:

答案 0 :(得分:0)

通常,您应该为要处理的每种特定类型的异常添加不同的catch块。如果您正在尝试处理(通过重新抛出)已检查的异常,那么您应该知道要重新抛出哪种类型的异常 - 只需添加catch块来重新抛出每种异常类型。

答案 1 :(得分:0)

我想你在问,“我怎样才能抓住Exception而不是RuntimeException

您可能不应该尝试这样做。您应尽可能捕获特定类型的异常。如果您需要处理所有错误,那么您应该抓住Exception并抓住所有内容。*

您很少想要catch (NullPointerException),因为如果您知道自己可以拥有null,那么您应该检查它。如果您的代码导致NullPointerExceptionArrayOutOfBoundsException,那么您应该修复代码,以便不再抛出这些代码。

此代码应显示如何执行您所询问的内容:

public static void throwSomething(Exception throwMe)
{
    try {
        throw throwMe;
    }
    catch(Exception ex) {

        // Check if the object is a RuntimeException
        if(ex instanceof RuntimeException) {
            // Throw the same object again.
            // Cast to RuntimeException so the compiler will not
            // require "throws Exception" on this method.
            throw (RuntimeException) ex;
        }

        System.out.println("Caught an instance of a " +
                ex.getClass().toString());
    }
}

*实际上,catch(Throwable)会抓住所有内容,包括Error s。

答案 2 :(得分:0)

最简单的方法是:

try { 
    //do stuff
} catch(RuntimeException e) {
    throw e;
} catch(SpecificCheckedException e) {
    //handle
} catch(Exception e) {
    //handle
}