异常处理(没有无异常的程序)
- 概念:异常是程序在执行过程中所产生的问题。
- 异常分类:
1.编译期异常(检查异常–Checked Exception): 检查异常通常是用户错误或者不能被程序员所预见的问题。
2.运行时异常(不检查异常–Unchecked Exception):运行时异常是一个程序员在运行过程中可能发生的、可能被程序员避免的异常类型。
★注:错误:错误不是异常。区别:异常能够用代码去纠正,而错误不能够用代码去纠正。如:硬件问题,运行环境问题。 异常的类型
Throwable–Error、Exception—RuntimeException(ArithmeticException、IllegalArguementException)、IOException捕获异常()
- try-catch
try{
正常逻辑下有可能发生异常的代码
}catch(异常类型){
处理代码
}catch(){
处理代码
}
- try-catch
★注:1.异常处理只要在返回虚拟机处理之前处理即可。2.当多个catch块之间存在继承关系的时候,子类catch块写前面,父类catch块写后面。
4>- try-catch- finally
try{
正常逻辑下有可能发生异常的代码
}catch(异常类型){
处理代码
}catch(){
处理代码
}finally{
始终执行的代码
}
★注:finally中书写不管是都发生异常都必须要执行代码,就算有return、break等跳转语句,也要先执行finally,再跳转。
1.特殊情况。
int x;
try{
x=1;
return x;
}catch(Exception ex){
x=2;
}finally{
x=3;
}
return x;
此时x的值为1.
若为引用类型,则还是finally的值。.
- *finally*关键字
用于: 资源的清理,通道的关闭,各种连接用完以后的关闭。
- throw 关键字与throws关键字
完整方法名:访问修饰符+可选修饰符+返回类型+方法名+形参列表+抛出异常类型 例如:public void A()throws Exception{ }
区别:
throw是写在方法体当中的,后面接的是异常对象,一旦执行到这步代码就会真正的执行异常抛出的动作;
throws是写在方法声明的最后,后面跟的是异常类的类名,可以跟多个,中间用逗号分隔。警告方法的调用者,本方法有可能会发生某些类型的异常。
★注:当throw后面跟的是运行时异常的时候,编译器不会强制我们在本方法后面加throws,就算我们自己加,本方法的调用者也不会在编译期收到警告。如果右面跟的是编译期异常的时候(包括Exception),编译器会强制我们在本方法的声明后面加上throws。
- 自定义异常
1.首先要继承Throwable或者Exception。
2.书写带参构造,将已发生的异常对象的信息,封装到自定义异常对象身上。书写带参构造,将业务异常信息装入自定义异常对象身上。
3.添加自定义异常的特有方法。