*异常
·异常就是程序运行过程中出现了不正常现象导致程序中断
·在Java中,把各种异常现象进行了抽象形成了异常类
*异常处理
·运行时异常不需要预处理,通过规范的代码可以避免
·受检异常必须预处理,否则编译报错,有两种预处理方法
·捕获处理
·抛出处理
*捕获处理
try{
对可能产生异常的代码进行检视
如果try代码块的某条语句产生了异常,就立即跳转到catch子句执行,try代码块后的代码不在执行
try代码块可能有多个受检异常需要预处理,可以通过多个catch子句分别捕获
}catch( 异常类型 1 e1){
捕获异常类型1的异常,进行处理
在开发阶段,一般的处理方式
1.获得异常信息
2.打印异常跟踪信息
e1.printStackTrace();
在部署后,如果有异常一般把异常信息打印到日志文件
}catch( 异常类型 2 e2){
捕获异常类型2的异常,进行处理
如果捕获的异常类型有继承关系,应该先驳货子异常再捕获父异常,没有继承关系,catch子句没有先后顺序
}finally{
不管是否产生了异常,finally子句总是会执行
一般情况下,会在finally中释放系统资源
}
*抛出处理
·在定义方法时,如果方法体中有受检异常需要预处理,可以捕获处理,也可以抛出处理谁调用这个方法谁负责处理该异常
·在方法定义时,把异常抛出就是为了提醒方法的使用者,有异常需要预处理。
*异常预处理的作用
·异常预处理即使在程序中出现了错误,也不会中断,继续执行下去
·增加程序的健壮性、鲁棒性
*异常处理方法的选择
·在调用其他方法时,如果方法有受检异常,需要预处理使用捕获处理。
·定义方法时,方法体中有异常需要预处理,可以选择捕获也可以选择抛出。
·如果抛出了一个异常,所在的方法应该使用throws声明该异常。
*方法覆盖的异常处理
*规则
·方法签名必须相同
·方法的返回值类型可以相同,子类方法的返回值类型可以是父类方法返回类型的子类型
·子类方法的访问权限可以更宽泛
·父类 public 子类 public
·父类 produced 子类 piblic/produced
·子类方法的异常比父类方法的异常更小
·父类无异常 子类无异常
·父类抛出异常 子类可以抛出相同异常、也可以抛出子异常、也可以不抛出
*异常在开发中的应用
*自定义异常:
·定义一个继承Exception
·在定义异常中提供两个构造方法
·在需要的位置通过throw抛出异常对象
·throw所在的方法通过throws生命该异常
·调用方法时需要对受检异常预处理