2

Java知识点总结(JavaIO-异常)

@(Java知识点总结)[Java, Java异常]

[toc]

为什么需要异常机制

不是所有的问题都能在编译时被发现,有些问题在程序运行时才会暴露出来

  异常机制是面向对象的处理程序在运行时发生的状况的手段
  使用异常机制不会打乱原有业务逻辑的
        - 用try块把可能出异常的代码保护起来
        - 用一个或多个catch块捕获发生的异常

Throwable

可以用throw关键字抛出Throwable及其子类对象

相关方法

  • getCause()
  • getMessage()
  • printStackTrace()
  • fillInStackTrace()

两个子类

  • Error

    • AssertionError
    • VirtualMachineError
    • StackOverflowError
    • OutOfMemoryError
    • AWTError

  • Exception

    • 运行时异常(非受检异常) - RuntimeException
    • 受检异常

异常的使用

声明异常

  1. 修饰符 返回类型 方法名(参数列表) throws 异常1,异常2, ...
  2. 声明的异常通常是受检查的异常
  3. 声明异常是为了让方法的调用者处理异常
  4. 声明异常时可以"无病呻吟"
  5. 子类重写的方法不能比父类被重写的方法声明更多的异常

捕获异常

  1. try块

    • 将可能出现异常的代码保护起来
    • 在Java 7以前try后面必须要有catch块或者finally块,不能单独使用

      • 从Java 7开始可以使用TWR语法(try-with-resources)

        • try (需要自动释放的资源) { ... }
  2. catch块

    * 如果try块中的代码发生了异常那么就由catch块捕获异常并执行相应的处理
    * 如果try块中的代码没有发生异常那么catch块不会执行
    * 一个try块后面可以跟上一个或多个catch块用于处理不同类型的异常
    * 如果多个catch块捕获的异常有父子关系那么要将捕获子类异常的catch块写在前面
    * 异常的捕获遵循里氏替换原则
    * catch块中捕获到的异常对象可以再次使用throw抛出
    
  3. finally块

    * 总是执行代码块,只要JVM没有关闭不管程序正常还是异常都会执行
    * 最适合释放打开的外部资源
    

抛出异常(throw异常对象)

自定义异常

继承RuntimeException

继承Exception及其他子类

设计和使用原则

不用异常机制处理正常业务逻辑

对可恢复的情况使用受检异常,对编程错误使用运行时异常

优先使用标准的异常类型

抛出异常的方法要有对应的文档注释

出现异常的方法要使对象保持在被调用之前的状态


苏生
803 声望725 粉丝