如何捕获通过读取和写入文件将引发的所有异常?

2022-08-31 08:41:08

在Java中,有没有办法获取(捕获)所有内容而不是单独捕获异常?exceptions


答案 1

如果需要,可以在方法中添加 throws 子句。然后,您不必立即捕获已检查的方法。这样,您就可以捕获较晚的(可能与其他时间同时捕获)。exceptionsexceptions

代码如下所示:

public void someMethode() throws SomeCheckedException {

    //  code

}

然后,如果您不想用该方法处理它们,则可以处理。exceptions

要捕获某些代码块可能抛出的所有异常,您可以这样做:(这也将捕获您自己编写的)Exceptions

try {

    // exceptional block of code ...

    // ...

} catch (Exception e){

    // Deal with e as you please.
    //e may be any type of exception at all.

}

之所以有效,是因为是所有异常的基类。因此,任何可能引发的异常都是一个(大写的“E”)。ExceptionException

如果你想处理自己的异常,首先只需在通用异常之前添加一个块。catch

try{    
}catch(MyOwnException me){
}catch(Exception e){
}

答案 2

虽然我同意捕获原始异常不是很好的风格,但有一些处理异常的方法可以提供卓越的日志记录,以及处理意外的能力。由于您处于特殊状态,因此您可能更感兴趣的是获得良好的信息而不是响应时间,因此性能实例不应该受到太大影响。

try{
    // IO code
} catch (Exception e){
    if(e instanceof IOException){
        // handle this exception type
    } else if (e instanceof AnotherExceptionType){
        //handle this one
    } else {
        // We didn't expect this one. What could it be? Let's log it, and let it bubble up the hierarchy.
        throw e;
    }
}

但是,这并没有考虑到IO也可能引发错误的事实。错误不是例外。错误与 Exceptions 位于不同的继承层次结构下,尽管两者都共享基类 Throwable。由于IO可以抛出错误,您可能希望甚至捕获可抛出

try{
    // IO code
} catch (Throwable t){
    if(t instanceof Exception){
        if(t instanceof IOException){
            // handle this exception type
        } else if (t instanceof AnotherExceptionType){
            //handle this one
        } else {
            // We didn't expect this Exception. What could it be? Let's log it, and let it bubble up the hierarchy.
        }
    } else if (t instanceof Error){
        if(t instanceof IOError){
            // handle this Error
        } else if (t instanceof AnotherError){
            //handle different Error
        } else {
            // We didn't expect this Error. What could it be? Let's log it, and let it bubble up the hierarchy.
        }
    } else {
        // This should never be reached, unless you have subclassed Throwable for your own purposes.
        throw t;
    }
}