Java异常处理 - 掘金
异常的英文单词是exception,字面翻译就是“意外、例外”的意思,也就是非正常情况。事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误。比如使用空的引用、数组下标越界、内存溢出错误等,这些都是意外的情况,背离我们程序本身的意图。错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误,在编译期间出现的错误有编译器帮助我们一起修正,然而运行期间的错误便不是编译器力所能及了,并且运行期间的错误往往是难以预料的。假若程序在运行期间出现了错误,如果置之不理,程序便会终止或直接导致系统崩溃,显然这不是我们希望看到的结果。因此,如何对运行期间出现的错误进行处理和补救呢?Java提供了异常机制来进行处理,通过异常机制来处理程序运行期间出现的错误。通过异常机制,我们可以更好地提升程序的健壮性。
异常和错误
:
异常
:程序执行中发生的不正常的情况,是可以避免的- 编程出现的逻辑错误
- 偶然的外在因素
错误
:错误是不可以避免的JVM
无法解决的严重问题
异常的体系结构
:
Throwable接口
Error类
Exception类
RuntimeException
非运行时异常
异常的处理方式
:
try-catch-finally
直接对异常进行处理try-catch-finally
的结构是可以相互嵌套的finally
中是一定会执行的代码。- 用于捕获异常的时候,是可选的,不一定非要有
- 一般在
finally
中进行一些关闭连接
或者关闭输入输出流
等释放资源的操作
- 执行过程中,一旦出现了异常,就会生成一个异常类对象,并到
catch
中进行异常的处理 catch
中的常见操作getMessage
获取异常的提示信息printStackTrace
打印堆栈的信息
- 在
try
中声明的变量不可以在代码块外面使用- 解决方法:提升一个等级,在代码块外面声明变量,但不进行初始化
- 体现了隔离性
try-catch-finally
的结构可以互相嵌套
throws + 异常类型
将异常抛出,交由别人来进行捕获处理throws
只是将异常抛出,但是没有进行处理- 具体对异常的处理,是由调用此部分结构的上级进行捕获处理的
自定义异常类
- Java支持用户自定义异常类
- 自定义异常类,首先要继承
Exception
或者RuntimeException
- 提供序列化编号:
serialVersionUID
,用于对异常类的唯一标识 - 在类中提供重载的构造器
- 一般可以重写的方法:
- 构造器
(Exception类中)
toString()(Object类中)
- 构造器