一、异常:程序在运行过程中出现的不正常的情况.
二、异常的由来:程序在运行过程中出现了不正常的情况,程序把它看成了对象,提取了属性,行为(异常的原因,位 置,名字),形成了各种的异常类
三、异常:Throwable
①分类:Error(错误):运行中出现的严重问题,不需要写代码处理
②Exception(异常):出现的不严重的问题,可以写代码处理
Exception的分类:
系统异常
自定义异常
四、异常的特点:当程序出现异常的时候,会打印异常信息并中断程序.
所以当程序中同时出现两个异常的时候,默认只会执行第一个.第二个无法执行到.
五、对异常的处理:检测异常,捕获异常,让异常不影响正常代码的执行
try{
可能出现异常的代码
}catch(Exception e){//捕获异常 e就是要捕获的异常
对出现异常代码的处理过程
}
继续执行下面的代码
六、对异常的另一种分类:
* 根据异常发生的位置
* 编译异常:在编译阶段就要求处理
* 运行时异常(RuntimeException):在运行阶段再要求处理:除数为零异常,空指针异常,数组下标越界异常
* 处理异常的手段:
* 第一种:异常的声明
* 异常声明后,调用者去处理,调用者不处理,继续声明直到交给JVM
* 第二种:trycatch
* 注意:这里讲的除数为零的异常是运行时异常,不需要手动进行异常的声明,系统帮他做了.我们这里只是为了 讲解异常的声明,所以假设这里是编译异常.
* 让谁去处理异常比较合适?
* 谁调用可能出现异常的方法,谁负责处理异常
七、finally关键字
try{
可能出现异常的代码
}catch(){
对异常的处理
}finally{
必须执行的代码 作用:在使用多线程的时候,使用数据库的时候,使用流的时候
}
注意点:他与异常无关
try{
获取资源
}finally{
释放资源
}
八、自定义异常: 由于Exception内部有异常的基本内容,所以直接继承Exception即可
什么样的问题需要我们自定义异常?
答:系统没有定义的异常,需要我们自己定义,我们解决的是系统异常没有处理的问题
实例:除数为负数异常 订单异常 用户信息异常
分析:1.自定义异常类
2.在进行除法运算的时候,自己抛出异常
3.去处理自定义异常
注意:对于编译异常,系统什么都不管,所有工作都需要我们自己做(异常的抛出,异常的处理,异常的声明等)