1、什么是异常

  • 错误在我们编写程序的过程中会经常发生,包括编译期间(括号没有正常的配对、语句结束后少了“;” 、关键字编写错误等等,这些错误编译器会发现并帮助我们进行修改)运行期间(编译器无能为力,并且难以预料会产生什么样的结果)的错误。
  • 在程序运行过程中,意外发生的,背离我们程序本身意图的表现,都可以理解为异常。

    2、异常分类

  • Error是程序无法处理的错误,表示运行应用程序中较严重问题;常见的错误有虚拟机错误(VirturalMachineError),内存溢出错误(OutOfMemoryError)、线程死锁(ThreadDeath)等;它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况

  • Exception时程序本身可以处理的异常,异常处理通常指针对这种类型异常的处理
  • Unchecked Exception :编译器不要求强制处理的异常,它包含RuntimeException 以及它的相关子类 5.1、Java异常 - 图1

    3、异常处理

  • 在Java应用程序中,异常处理机制为:

    • 抛出异常:当一个方法当中出现错误引发的异常的时候,方法会去创建异常对象并且交付给运行时系统进行处理 5.1、Java异常 - 图2
    • 捕获异常:而当运行时系统捕获到了异常就会进入到捕获异常环节,在这个环节中,运行时系统会逐步的去寻找合适的处理器,如果找到了与抛出异常匹配的处理器,那么就会执行相关的处理逻辑,如果始终没有找到,那么运行时系统将会终止,这时也就意味着Java程序也就终止了
  • 对于运行时异常、错误或可查异常,Java所要求的异常处理方式有所不同
    • Java规定:对于可查异常必须捕获、或者声明抛出。
    • 允许忽略不可查的RuntimeException(含子类)和Error(含子类)
  • 通过5个关键字来实现:try、catch、finally、throw、、throws
    • 捕获异常
      • try:执行可能出现异常的代码
      • catch:捕获异常
      • finally:无论是否发生异常代码总能执行
    • 声明异常
      • throws :声明可能要抛出的异常
  • try-catch-finally
    • try块后面可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。
    • try必须组合使用,不允许单独存在
    • catch和finally没有try,也无法使用
  • public static void exit(int status) :终止当前正在运行的Java虚拟机,参数1

    4、return关键字在异常处理中的作用

  • finally块中不能加return,会屏蔽掉之前的return逻辑

    5、 throw & throws

  • 可以通过throws声明将要抛出何种类型的异常,通过throw将产生的异常抛出

    1、throws

  • 如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法的声明处用throws子句来声明抛出异常,谁调用了这个方法,谁就会去处理相关的抛出异常

  • throws语句在方法定义时声明该方法要抛出的异常类型。
  • 当方法抛出异常列表中的异常时,方法将不对这些类型及其子类类型的异常做处理,而是抛向调用该方法的方法,由它去处理