在Java中,凡是可能抛出异常的语句,都可以用try … catch捕获。把可能发生异常的语句放在try { … } 中,然后使用catch捕获对应的Exception及其子类。
1.在多个catch的时候,catch的顺序非常重要:子类必须写在前面,多个catch只会执行一个
每一个catch块用于处理一个异常。异常匹配是按照catch块的顺序从上往下寻找的,只有第一个匹配的catch会得到执行。匹配时,不仅运行精确匹配,也支持父类匹配,因此,如果同一个try块下的多个catch异常类型有父子关系,应该将子类异常放在前面,父类异常放在后面,这样保证每个catch块都有存在的意义。
例如:
public static void main(String[] args) {
try {
process1();
process2();
process3();
} catch (UnsupportedEncodingException e) {
System.out.println("Bad encoding");
} catch (IOException e) {
System.out.println("IO error");
}
}
finally语句
java的try … catch机制还提供了finally语句,finally语句块保证有无错误都会执行.
良好的编程习惯是:在try块中打开资源,在finally块中清理释放这些资源。
注意finally有几个特点:
finally语句不是必须的,可写可不写;
finally总是最后执行。
例如:
public static void main(String[] args) {
try {
process1();
process2();
process3();
} catch (UnsupportedEncodingException e) {
System.out.println("Bad encoding");
} catch (IOException e) {
System.out.println("IO error");
} finally {
System.out.println("END");
}
}
使用try … catch … finally时:
多个catch语句的匹配顺序非常重要,子类必须放在前面;
finally语句保证了有无异常都会执行,它是可选的;
一个catch语句也可以匹配多个非继承关系的异常。