Answers:
如果需要,可以在方法中添加throws子句。然后,您不必立即捕获已检查的方法。这样一来,您可以赶上exceptions
后面的内容(也许与other同时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.
}
起作用的原因是因为它Exception
是所有异常的基类。因此,可能引发的任何异常都是Exception
(大写的“ E”)。
如果要处理自己的异常,只需catch
在通用异常之前添加一个块。
try{
}catch(MyOwnException me){
}catch(Exception e){
}
虽然我同意捕获原始异常不是一种好的样式,但是有一些处理异常的方法可以提供出色的日志记录,并具有处理意外事件的能力。由于您处于异常状态,因此与获取响应时间相比,您可能更感兴趣于获取良好的信息,因此,instanceof性能不会受到太大的影响。
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也可能引发错误的事实。错误不是例外。错误是与异常不同的继承层次结构,尽管两者都共享基类Throwable。由于IO可能会引发错误,因此您可能想赶上Throwable
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;
}
}
捕获基本异常“ Exception”
try {
//some code
} catch (Exception e) {
//catches exception and all subclasses
}
捕获Exception是一个不好的做法-它太广泛了,您可能会在自己的代码中错过NullPointerException之类的东西。
对于大多数文件操作,IOException是根异常。最好抓住这一点。
就在这里。
try
{
//Read/write file
}catch(Exception ex)
{
//catches all exceptions extended from Exception (which is everything)
}
您可以在单个catch块中捕获多个异常。
try{
// somecode throwing multiple exceptions;
} catch (Exception1 | Exception2 | Exception3 exception){
// handle exception.
}