6.1概述
考点:1
概述
Java为异常定义了类和关键字,把异常加入了Java语言的结构体系,从而简化了错误控制代码。异常处理将错误处理的控制流从正常进行的控制流中分离开,使我们再也不用检查一个特定的错误,并在程序的多处地方对其进行控制。此外,也不需要在方法调用的时候检查错误,而只需要在异常控制模块中处理错误。
6.2异常类型
考点:2
异常类型(捕获异常、声明异常、抛出异常)
异常类在Java语言中是一种较特殊的类,按照异常处理的不同可以分为捕获异常、声明异常、抛出异常和运行异常。
1.捕获异常
若某个方法产生一个异常,则必须保证该异常能被捕获,并获得正确处理。对于Java的异常控制机制,通过在try子句中处理需要解决的问题,然后在catch子句中对来自try子句代码内部的错误进行处理,最后通过finally子句释放资源,实现异常处理的出口。语法如下:
try{
// 可能产生异常的代码
}catch(Typel id1){
// 处理Type1异常的代码
}catch(Type2 id2)}
// 处理Type2异常的代码
}finally{
// 最后异常处理的代码
}
2.声明异常
Java方法遇到自己不能解决的情况,就会声明异常。声明异常的方法在方法声明中必须描述潜在的异常类型,它属于方法声明的一部分,位于自变量(参数)列表的后面。语法如下:
throws exception),exception2,…// 异常列表
3.抛出异常
在捕获一个异常之前,必须先有异常抛出。通过使用抛出异常来生成一个异常对象。要求能抛出的异常必须是Throwable类或其子类的实例,并且抛出异常和生成异常对象都是通过throw语句实现:
catch(Exception e){
System.out.println(“一个异常已经产生”);
throw e;
}
6.3处理异常
考点:3
处理异常
处理异常主要包括捕获、程序流程的跳转和异常处理语句块的定义。处理异常的时候还需要注意try和catch子句的匹配、父类和子类异常匹配,以及catch子句的排序等问题。
1.try和catch子句
由try引导产生异常的“警戒区”,后面跟的是catch子句,try内部不同的方法调用可能产生相同的异常,对于同一个异常只需要一个catch子句。
2.finally子句
finally子句作为捕获异常的统一出口,实现了释放资源、关闭文件等工作,从而保证了控制流在转到其他路径之前,程序的状态被统一管理。
3.异常处理的原则
对异常事件分类,通过异常层次实现控制;异常处理代码和正常代码分开;使用finally作为统一出口;能简单测试就尽量不使用异常控制;自定义异常类时,使用Throwable类及其子类,一般定义为非运行时的异常,除非在运行时产生或者不易预测。