我怎样才能捕捉到通过读写文件将会抛出的所有exception呢?
在Java中,是否有任何方法来获取(捕获)所有exceptions
而不是单独捕获exception?
如果你愿意,你可以添加抛出子句到你的方法。 那么你不必马上就能检查检查的方法。 这样,以后可以捕捉exceptions
(也许与其他exceptions
同时发生)。
代码如下所示:
public void someMethode() throws SomeCheckedException { // code }
然后,如果你不想用这种方法处理这些exceptions
那么你可以处理这些exceptions
。
要捕获所有exception,可能会抛出一些代码块:(这也会捕获你自己编写的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的基类。 因此任何可能引发的Exception
都是Exception
(大写'E')。
如果你想先处理自己的exception,只需在通用exception之前添加一个catch
块即可。
try{ }catch(MyOwnException me){ }catch(Exception e){ }
虽然我同意抓住一个原始exception并不是很好的风格,但是有很多方法可以处理exception,这些exception提供了出色的日志logging以及处理exception的能力。 既然你处于一种特殊的状态,那么你可能对获得好的信息比对响应时间更感兴趣,所以这样的performance应该不会太大。
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也可以抛出错误的事实。 错误不是例外。 错误是一个不同于inheritance的inheritance层次,虽然它们都共享基类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“exception”
try { //some code } catch (Exception e) { //catches exception and all subclasses }
捕获exception是一个不好的做法 – 它太宽泛了,你可能会错过你自己的代码中的NullPointerException exception 。
对于大多数文件操作, IOException是根exception。 相反,最好抓住这一点。
就在这里。
try { //Read/write file }catch(Exception ex) { //catches all exceptions extended from Exception (which is everything) }
你的意思是捕获抛出的任何types的exception,而不仅仅是特定的exception?
如果是这样:
try { ...file IO... } catch(Exception e) { ...do stuff with e, such as check its type or log it... }