Java 读书笔记 (十五) Java 异常处理
2017-12-25 17:32 钱先生 阅读(298) 评论(0) 编辑 收藏 举报捕获异常
使用try 和catch关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。
try/catch 代码块中的代码称为保护代码 ,使用try/catch的语法如下:
1 try 2 { 3 //程序代码 4 } catch(ExceptionName e1) 5 { 6 //Catch块 7 }
Catch语句包含要捕获异常类型的声明,当保护代码块中发生一个异常时,try后面的catch块就会被检查。
如果发生的异常包含在catch块中,异常会被传递到该catch块,这和传递一个参数到方法是一样。
实例:
下面的例子中声明有两个元素的一个数组,当代码试图访问数组的第三个元素的时候就会抛出一个异常.
1 //文件名: ExcepTest.java 2 import java.io.*; 3 public class ExcepTest{ 4 5 public static void main(String args[]){ 6 try{ 7 int a[] = new int[2]; 8 System.out.println("Access element three :"+a[3]); 9 } catch (ArrayIndexOutofBoundsException e){ 10 System.out.println("Exception thrown :"+e); 11 } 12 System.out.println("Out of the block"); 13 } 14 } 15 16 17 /*以上代码编译执行输出结果: 18 Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3 19 Out of the block
多重捕获块
一个try代码块后面跟随多个catch代码块的情况就叫多重捕获。
try{ //程序代码 } catch(异常类型1 异常的变量名1){ //程序代码 } catch(异常类型2 异常的变量名2){ //程序代码 } catch(异常类型3 异常的变量名3){ //程序代码 }
可以在try语句后面添加任意数量的catch块。
如果保护代码中发生异常,异常被抛给第一个catch块。
如果抛出异常的数据类型与ExceptionType1匹配,它在这里就会被捕获。
如果不匹配,它会被传递给第二个catch块。
如此,直到异常被捕获或者通过所有的catch块。
finally 关键字
finally 关键字用来创建在try代码块后面执行的代码块。
无论是否发生异常,finally 代码块中的代码总会被执行。
在finally代码块中,可以运行清理类型等收尾善后性质的语句。
finally 代码块出现在catch代码块最后,语法如下 :
// finally 在try 语句中是不是相当于if...else语句中的else?
1 try{ 2 //程序代码 3 }catch(异常类型1 异常的变量名1){ 4 //程序代码 5 }catch(异常类型2 异常的变量名2) { 6 //程序代码 7 } finally{ 8 //程序代码 9 }
注意事项:
- catch不能独立于try 存在
- 在try/catch后面添加finally 块并非强制性要求的
- try代码后不能既没catch块也没finally 块
- try,catch,finally 块之间不能添加任何代码
// 是不是try后面可以直接跟finally,没有catch?
通用异常
在Java中定义了两种类型的异常和错误。
- JVM(Java虚拟机)异常 :由JVN抛出的异常或错误。例如: NullPointerException类,ArrayIndexOutOfBoundsException类,ClassCastException类
- 程序级异常: 由程序或者API程序抛出的异常。例如IIIegalArgumentException类,IIIegalStateException类.