异常是指在方法不能按照正常方式完成时,可以通过抛出异常的方式退出该方法。
在异常中封装了方法执行过程中的错误信息及原因,调用方在获取该异常后可根据业务的情况选择处理该异常或者继续抛出该异常。

异常分类

java应用oom会导致程序挂 java异常会终止程序运行吗_Java

  • Throwable是所有错误或异常的父类,Throwable又可分为Error和Exception,如上图。
  • Error:Java程序错误,程序启动时出现Error,则启动失败;如果在运行过程中出现Error,则系统将退出进程。出现Error通常是因为系统的内部错误或资源耗尽,Error不能被在运行过程中动态处理。
  • Exception:Java程序运行异常,即运行中的程序发生了人们不期望发生的事件,可以被Java异常处理机制处理。它可分为RuntimeException(运行时异常)和CheckedException(检查异常)。
  • RuntimeException:Java虚拟机正常运行期间抛出的异常,可以被捕获并处理,如果出现RuntimeException,那么一定是程序发生错误导致,通常需要抛出异常或者捕获并处理该异常,常见的有空指针异常/数组越界异常等。
  • CheckedException:在编译阶段Java编译器会检查CheckedException异常并强制程序捕获和处理此类异常,即要求程序在可能出现异常的地方通过try catch语句块捕获并处理。常见的该类异常有ClassNotFoundException/SQLException/IOException等。

异常处理方式

抛出异常

  • 遇到异常时不进行具体处理,而是抛给调用者,由调用者根据情况处理。
  • 抛出异常有三种形式:throws/throw/系统自动抛出异常。throws作用在方法上,用于定义方法可能抛出的异常;throw作用在方法内,表示明确抛出一个异常。
thorw和throws的区别:
  • 位置不同:throws作用在方法上,后面跟着的是异常的类;而throw作用在方法内,后面跟着的是异常的对象。
  • 功能不同:throws用来声明方法在运行过程中可能出现的异常,以便调用者根据不同的异常类型预先定义不同的处理方式;throw用来抛出封装了异常信息的对象,程序在执行到throw时后续的代码将不再执行,而是跳转到调用者,并将异常信息抛给调用者。即throw后面的语句块将无法被执行(finally语句块除外)。

使用try catch 捕获并处理异常

  • 使用try catch语句块能够有针对性的处理每种可能出现的异常,并在捕获到异常后根据不同的情况做不同的处理。
  • 用try catch语句块将可能出现异常的代码包起来即可。