写在开头
异常是导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失
所以在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序正常的执行。
今天我们说一下Java:异常处理
概述和分类
异常: Java代码在运行的过程中,出现了问题或者出现了错误
异常封装成异常类,代码出现了问题,创建一个异常类,告诉用户代码的问题出在什么地方,异常出现的原因(也是一个提醒)
异常的分类:
Throwable
Error : 错误, 代码发生了很严重的问题,解决方式,只能修改代码,Error的情况尽量避免
Exception: 异常,代码发生了错误,错误不严重,可以进行捕获或者是声明以及处理
RuntimeException : 运行时异常,不需要代码进行任何的处理,等着将错误显现出来
例如: NullPointerException ArrayIndexOutOfBoundsException
编译异常: 如果出现,代码必须要进行声明或者解决异常
所有的异常都是Exception的子类
Error错误发生的代码:
Exception异常发生的代码:
1 |
|
JVM默认的默认的异常处理机制
- 发生了一个异常,先检测一下,自己方法本身是否有处理这个异常
- 如果没有异常的处理方案,将这个异常抛给方法的调用者
- 如果所有的方法都没有处理这个异常,异常就到了JVM这里
- JVM接收到异常
1) 将异常信息以红色字体打印到控制台上
2) 代码停止运行
throws关键字抛出异常
throw: 表示抛出一个异常
语法格式:
throw new 异常的类名(可以写异常信息);
使用方式:
- throw 关键字写在方法的内部
- throw new Exception 或者 new Exception的子类
- throw抛出异常后,方法不能再继续执行了
- 方法内部,通过throw关键字抛出异常后,需要对这个异常进行解决(RuntimeException本身以及其子类异常除外)
1) 异常的声明,自己不处理,等别人处理
2) 进行异常的处理, try…catch
throw关键字的使用场景(实际工作中):
- 做输入项的校验,如果输入项不合法(不符合验证规则),交易就应该停止
举例:
if( !“QQ”.equals(name) ){
}throw new Exception(“用户名输入错误”);
- 除了输入项之外,后台的逻辑中,需要终止代码的情况分支,也是通过throw来控制的
1 |
|
throws 关键字声明异常
throws: 在方法上面进行异常的声明,只做声明,不做处理,等着方法的调用者处理
语法格式:
修饰符 返回值类型 方法名(参数列表) throws 异常类名, 异常类名…{
}
使用说明:
- throws写在方法的声明上
- throws 后面的异常必须是Exception或者是Exception的子类
- 方法内部,抛出了多个异常,方法的声明上就需要将多个异常都声明出来,异常之间通过逗号分隔
- 如果多个异常之间具有子父类的继承关系,可以直接声明一个父类的异常即可
- 如果方法上有throws异常的声明,方法在被调用时,调用者必须要处理这个异常
1) 如果声明的异常时RuntimeException 异常,那么不需要处理
2) 如果声明的编译异常, 调用者必须进行处理
1 |
|
异常的处理
try…catch 捕捉已成
try…catch: 异常的处理
语法结构:
try{ // 用于检测异常
// 可能会发生异常的代码
}catch(异常类 变量){// 用于捕获异常
// 如果发生了异常,针对异常的处理方式
}
说明:
- try中没有发生异常,catch不执行的,代码继续运行
- try检测出异常,进入到catch进行异常的捕获,但是先匹配catch中的异常是否与抛出的异常一致
1) 一致,执行catch中的语句逻辑,代码从try…catch语句之后继续执行
2) 不一致,catch中的语句不执行,JVM默认的处理机制 - try…catch中的变量作用域一定要注意,try中定义的变量,在catch中不能使用的
1 |
|
1 | //多catch |
1 | /*try...catch...finally |
晚安
今天就到这里了,明天见,加油!