《JAVA异常》
开发工具与关键技术:Eclipse 与 java
作者:蔡杰明
撰写时间:2021 年 05 月 03 日
Java异常分为两大类:
1、Checked异常:不是RuntimeException类及其子类的实例【自定义异常】
2、Runtime异常(运行时异常):所有的RuntimeException类及其子类的实例
① Checked异常只有Java提供,其他语言没有Checked异常
② Checked异常可被处理(修复)的异常,必须显示处理Checked异常;程序没有处理Checked异常,程序编译时会发生错误。
③ Checked异常:没有完善错误处理的代码根本就不会被执行
④Runtime异常:灵活,Runtime异常无须显示声明抛出,程序捕获Runtime异常,可用try…catch块来实现
Exception异常:程序运行出现意外情形,系统自动生成一个Exception对象通知程序
Java异常处理机制:抛出异常,捕捉异常,处理异常
处理异常则使用try…catch捕捉异常【try捕捉异常,catch处理异常】
try{
//业务功能代码
}catch(异常类1 e1){
//异常处理代码1
}catch(异常类2 e2){
//异常处理代码2
}…
在使用try…catch捕获处理异常时需要注意:
- 不要过度使用异常,不能使用异常处理机制来代替正常的流程控制语句
- 异常捕获时,一定要先捕获小异常,再捕获大异常。否则小异常无法被捕获
- 避免出现庞大的try块
- 避免使用catch(Exception e){}
- 不要忽略异常
直接使用catch(Exception e){},会使下面的异常类全部报错,
因为catch(Exception e){}是庞大的异常类,不符合异常捕获规范
小异常---->大异常[范围大的异常,所有的异常都能匹配上]
catch处理异常时,会逐步的匹配异常,匹配不上的异常会继承往下匹配到对应的异常
错误和异常:
throws异常:在声明方法不处理异常,往外抛出异常
throw异常:主动抛出异常
自定义异常类:
根据继承的类不同,定义的异常类不同
- 定义一个普通的异常(checked类),直接继承Exception基类,就是checked异常
- 定义一个Runtime异常,继承RuntimeException基类。
为什么有自定义异常类? - 自定义异常为了根据不同的异常,传递不同的信息。
- 为了规范。用别人的异常和异常的名字和现有的异常可能不匹配,进行不了判断处理
- 用现有的异常可能不能进行判断处理
- 有时要根据异常的类名,去根据异常类的名字进行不同的处理。
- 都用Runtime异常进行判断的话,异常的名字全部都一样,不适合进行判断[可能无法判断]