异常处理:抓抛模型
1.抛:程序在正常执行过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象,并将此对象抛出,抛出对象后,其后的代码不再执行。
关于异常对象的产生:
①系统自动生成的对象
②手动生成的对象,并抛出(throw)。
例:throw new XxxExcepetion();
2.抓:异常的处理方式
①try-catch-finally
try{
//可能出现异常的代码块
}catch(异常类型1 变量名1){
//处理异常方式1
}catch(异常类型2 变量名2){
//处理异常方式2
}finally{//finally是可选的
//一定会执行的代码块
}
如果匹配了某一个catch,则执行catch中的语句后跳出 try-catch 结构,多个catch中若有字父类关系,则子类的一定要在父类之上,否则会报错。
常用的异常处理方式:String getMessage(); ,void printStackTrace();
finally的使用:
- finally中声明的是一定执行的代码,即使catch中又出现异常,try中有return,catch中有return。
- 像数据库连接,IO流,JVM是不能自动回收的,我们需要自己手动进行资源释放,此时就需要声明在 finally 中,防止发生异常后无法释放资源。
②throws
用法: throw + 异常类型,写在方法声明处,表明在该方法执行时,可能会抛出该异常类型。
异常的分类
- 编译中异常
- 运行时异常
体会:
① try-catch-finally 处理编译中异常时使编译器不报错,但运行时仍可能报错,相当于将编译时异常延迟到运行时异常。
②在开发时,对于运行时异常,通常不去写 try-catch-finally ,而是直接修改代码。
用户自定义异常类
- 需要继承与现有的异常结构:RuntimeExcepetion,Excepetion
- 提供全局常量:serialVersionUID
- 提供重载的构造器