Java异常处理 - 掘金
    异常的英文单词是exception,字面翻译就是“意外、例外”的意思,也就是非正常情况。事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误。比如使用空的引用、数组下标越界、内存溢出错误等,这些都是意外的情况,背离我们程序本身的意图。错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误,在编译期间出现的错误有编译器帮助我们一起修正,然而运行期间的错误便不是编译器力所能及了,并且运行期间的错误往往是难以预料的。假若程序在运行期间出现了错误,如果置之不理,程序便会终止或直接导致系统崩溃,显然这不是我们希望看到的结果。因此,如何对运行期间出现的错误进行处理和补救呢?Java提供了异常机制来进行处理,通过异常机制来处理程序运行期间出现的错误。通过异常机制,我们可以更好地提升程序的健壮性。


    异常和错误

    • 异常:程序执行中发生的不正常的情况,是可以避免的
      • 编程出现的逻辑错误
      • 偶然的外在因素
    • 错误:错误是不可以避免的
      • JVM无法解决的严重问题

    异常的体系结构

    • Throwable接口
      • Error类
      • Exception类
        • RuntimeException
        • 非运行时异常

    image.png

    异常的处理方式

    • try-catch-finally 直接对异常进行处理
      • try-catch-finally的结构是可以相互嵌套的
      • finally中是一定会执行的代码。
        • 用于捕获异常的时候,是可选的,不一定非要有
        • 一般在finally中进行一些 关闭连接或者关闭输入输出流等释放资源的操作
      • 执行过程中,一旦出现了异常,就会生成一个异常类对象,并到catch中进行异常的处理
      • catch中的常见操作
        • getMessage 获取异常的提示信息
        • printStackTrace 打印堆栈的信息
      • try中声明的变量不可以在代码块外面使用
        • 解决方法:提升一个等级,在代码块外面声明变量,但不进行初始化
        • 体现了隔离性
      • try-catch-finally的结构可以互相嵌套
    • throws + 异常类型 将异常抛出,交由别人来进行捕获处理
      • throws 只是将异常抛出,但是没有进行处理
      • 具体对异常的处理,是由调用此部分结构的上级进行捕获处理的
        image.png

    自定义异常类

    • Java支持用户自定义异常类
    • 自定义异常类,首先要继承Exception或者RuntimeException
    • 提供序列化编号:serialVersionUID,用于对异常类的唯一标识
    • 在类中提供重载的构造器
    • 一般可以重写的方法:
      • 构造器(Exception类中)
        image.png
      • toString()(Object类中)