异常Exception
基本概念
程序执行中发生的不正常情况称为异常
执行过程中发生的两类异常事件
-
Error
: JVM无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如StackOverflowError
和OOM
,Error
是严重错误,程序会崩溃。 -
Exception
: 其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。如空指针访问,试图读取不存在的文件,网络连接中断等。
Exception
分为两类:运行时异常
和编译时异常
异常体系图
常见的运行时异常
-
NullPointerException
空指针异常 -
ArithmeticException
数学运算异常 -
ArrayIndexOutOfBoundsException
数组下标越界异常 -
ClassCastException
类型转换异常 -
NumberFormatException
数字格式不正确异常
常见的编译异常
-
SQLException
操作数据库时,查询表可能发生异常 -
IOException
操作文件时,发生的异常 -
FileNotFoundException
当操作一个不存在的文件时,发生异常 -
ClassNotFoundException
加载类,而该类不存在时,异常 -
EOFException
操作文件,到文件末尾,发生异常 -
IllegalArgumentException
参数异常
异常处理的方式
-
try-catch-finally
在代码中捕获发生的异常,自行处理执行顺序
-
如果没有出现异常,则执行try块中所有语句,不执行catch块中语句,如果有finally,则最后还需执行finally里面的语句
-
如果出现异常,则try块中异常发生后,剩下语句不再执行,将执行catch块中的语句,如果有finally,最后还需执行finally里面的语句
-
-
throws
将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MbUhQaxD-1645082565256)(C:\Users\lyu34\AppData\Roaming\marktext\images\2022-02-10-15-55-16-image.png)]
JVM处理异常
:输出异常信息然后退出程序注意
子类重写父类方法时,抛出异常必须与父类抛出异常类型相同或是父类抛出的异常的子类型
两种方法二选一,要么处理要么抛出
运行时异常默认throws,编译异常必须显式处理
自定义异常
自定义异常步骤
-
定义类:自定义异常类名,继承
Exception
或RuntimeException
-
如果继承
Exception
,属于编译异常 -
继承
RuntimeException
,属于运行异常
throw和throws的区别
意义 | 位置 | 后面跟的东西 | |
---|---|---|---|
throws | 异常处理的一种方式 | 方法声明处 | 异常类型 |
throw | 手动生成异常对象的关键字 | 方法体中 | 异常对象 |
—😐
| throws | 异常处理的一种方式 | 方法声明处 | 异常类型 |
| throw | 手动生成异常对象的关键字 | 方法体中 | 异常对象 |