异常的处理

来源:互联网 发布:淘宝旗舰店卖假货 编辑:程序博客网 时间:2024/06/04 20:02

一直以来,catch时子类在前,父类在后,两个都处理,但却。。。。。

import java.io.*;   class BBB {     public static void main(String args[]) {       try {         throw new IOException();       } catch (IOException q) {         System.out.println("IOE");       } catch (Exception e) {         System.out.println("Exception"); // 这句为什么不执行     }     }   } 

回复:
catch住一个IOException 处理了 然后就退出try-catch语句块啊

都被 IOException 捕获了啊。假如你的代码中会抛出 IOException,也会抛出 SQLException 的话,
那就会根据不同类型的异常由不同的异常处理块进行处理。

try {     ...     ...   } catch (IOException e1) {       System.out.println("IOException");   } catch (SQLException e2) {       System.out.println("SQLException");   } 

异常只能被一个 catch 所捕获,因此越父类异常都应该写在子类异常的后面。

比如说,在普通的文件读写操作中,会同时抛出 FileNotFoundException 和 IOException,
经查询 API DOC 可以看出 IOException 是 FileNotFoundException 的父类异常。

因此写代码可以写成:

try {       ...   } catch (FileNotFoundException e1) {       ...   } catch (IOException e2) {       ...   }  

但我们不能写成下面这样:

try {       ...   } catch (IOException e2) {       ...   } catch (FileNotFoundException e1) {       ...   }  

因为如果在 try 中抛出 FileNotFoundException 的话,首先会被 IOException 的 catch 块所捕获,
FileNotFoundException 的 catch 块永远执行不到。

当然了,如果不需要在不同的异常 catch 块中写一些健壮性代码的话,FileNotFoundException 和
IOException 可以只使用 IOException catch 块,甚至可以直接使用 Exception 的 catch 块。

原创粉丝点击