异常
Throwable(抛)
- Exception 凡是能够用代码去纠正的就是异常
- 分类
- 编译期异常——检查异常CheckedException
- 运行时异常——不检查异常UncheckEeception
- RuntimeException
- Error 不能用代码去解决的就是错误,错误不是异常。例如:硬件问题,环境问题。
- 异常的产生和处理机制
处理
- 提前判断
- try…catch
- 语法上:只有以下三种
- try - catch
- try - finally //只有exit()能结束。
- try - catch - finally
- 抛出去
- finally关键字
捕获异常
- try{ //try后面允许接多个catch
- 正常逻辑下有可能发生异常的代码
- }catch(异常类型){
- 处理代码}finally{
- 不管是否发生异常,都必须要执行的代码写在finally
- 就算是retuen\break等跳转语句,也要先执行finally,再跳转
- 除了exit(),可以退出,其他都不能
- 往往是资源的清理,通道的关闭,各种连接用完后的关闭才使用
}
当两个异常有继承关系时,子类的catch写前面,父类的写后面
throw是写在方法体中,后面接的是一个异常对象,一旦执行到这句代码就会真正的发生异常抛出的动作
- throws是写在方法声明的最后,后面跟的是异常类的类名,可以跟多个,中间用逗号分隔,是警告方法的调用者,本方法有可能出现警告异常。
- 当throw后面跟的是一个运行时异常时,并不要求写throws,即使写了,使用者也不会受到警告
- 但是throw是编译时异常(包括Exception),就必须在声明部分加throws
分层架构
- 三层结构 //一层一层向上抛
- 界面
- 业务层
- 业务处理
- 持久层/持久访问层
- 完成数据库操作/CRUD操作
Throwable的两个类
- getMessage
- printStackTrace
自定义异常
**继承**Exception或者Throwable
- 书写带参构造,将已发生的异常对象的信息封装到自定义异常对象身上
- 业务异常虚拟机不一定报异常,书写带参构造,将业务异常信息装入自定义异常对象身上
- 添加自定义异常的特有方法