如何捕获通过读取和写入文件将引发的所有异常?
2022-08-31 08:41:08
在Java中,有没有办法获取(捕获)所有内容而不是单独捕获异常?exceptions
在Java中,有没有办法获取(捕获)所有内容而不是单独捕获异常?exceptions
如果需要,可以在方法中添加 throws 子句。然后,您不必立即捕获已检查的方法。这样,您就可以捕获较晚的(可能与其他时间同时捕获)。exceptions
exceptions
代码如下所示:
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”)。Exception
Exception
如果你想处理自己的异常,首先只需在通用异常之前添加一个块。catch
try{
}catch(MyOwnException me){
}catch(Exception e){
}
虽然我同意捕获原始异常不是很好的风格,但有一些处理异常的方法可以提供卓越的日志记录,以及处理意外的能力。由于您处于特殊状态,因此您可能更感兴趣的是获得良好的信息而不是响应时间,因此性能实例不应该受到太大影响。
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;
}
}