一、什么是异常???
程序在运行过程中出现的特殊情况。
异常处理的必要性:任何程序都可能存在大量的位置的问题、错误;如果不对这些问题进行处理,则可能导致程序的中断,造成不必要的损失。
二、异常的分类
Throwable:可抛出的,一切错误或异常的父类,
java.lang.Throwable;
JVM或Java throw语句抛出
它的子类:
Error:JVM、硬件、执行逻辑错误,不能手动处理。
Exception:程序在运行和配置中产生的问题,可处理。
–RuntimeException:运行时异常,可处理也可不处理。
–CheckedException:检查异常,必须处理。
处理方案之一:throws Exception
三、异常的产生
–自动抛出异常,当程序运行时遇到不符合规范的代码或结果时,会产生异常。
–手动抛出异常:语法:throw new ExceptionType(“实际参数”);
–产生异常结果:相当于遇到了return语句,导致程序因异常而停止。
四、异常的传递
–按照方法的调用链反向传递,如始终没有处理异常,最终会由JVM进行默认异常处理(打印堆栈跟踪信息)。
–受查异常:throws 声明异常,修饰在方法参数列表后端。
–运行时异常因可处理也可不处理,因此无需声明异常。
异常的处理
try {
//可能出现异常的代码块
}catch(Exception_Type e){
//异常处理的相关代码,如:getMessage()、printStackTrace();
}final {
//无论异常与否,都会执行的代码!
//当try{}和catch(){}中都有return等结束程序的语句时,使用finale{代码执行在程序结束前}
}
四、异常的处理
必须对程序可能出现的异常分门别类的分别进行处理!
多重catch:遵从子类异常到父类异常的顺序,父类异常在最后。
五、常见的try{}catch{}结构
1.try{} catch{}
2.try{} catch{} catch{}
3.try{} catch{} finally{}
4.try{} catch{} catch{} finally{}
5.try{} finally{}
六、自定义异常
1.继承自Exception或Exception的子类,常用RuntimeException。
2.必要提供的构造方法:
2.1 无参数构造方法
2.2 String message参数的构造方法
七、关于声明过异常的方法的覆盖
1.带有异常声明的方法覆盖:
1.1 方法名、参数列表、返回值类型必须和父类相同
1.2 子类的访问修饰符符合父类相同或是比父类更宽
1.3 子类中的方法,不能抛出比父类或接口更多、更宽的异常
总结
1.异常的概念:
程序在运行过程中出现的特殊情况。
2.异常的分类:
RuntimeException:运行时异常,可处理,可不处理。
CheckedException:受查异常,必须处理。
3.异常的产生:
3.1 throw new 异常类型(“实际参数”);
3.2 相当于遇到return语句,导致程序因异常而终止。
4.异常的传递:
按照方法的调用链反向传递,如始终没有处理异常,最终会由JVM进行默认异常处理(打印堆栈跟踪信息 e,printStackMessage())。
5.异常的处理:
try{} catch{} finally{}
6.带有异常声明的方法覆盖:
子类中的方法,不能抛出比父类更多、更宽的异常。