一直以来,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 块。