我怎样才能捕捉到通过读写文件将会抛出的所有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... }