捕获异常

try-catch-finally

  1. try{
  2. // 要检查的程序语句;
  3. // ...
  4. }catch(异常类 对象名称){
  5. // 异常发生时的处理语句;
  6. }finally{
  7. // 一定会运行到的程序代码;
  8. }

(1)多重catch语句中,异常类型必须子类在前,父类在后。
(2)在一个异常处理程序中处理多个类型的异常

  1. //在catch子句中,多个类型的异常使用竖线(|)分隔每个异常类型
  2. catch (IOException|SQLException ex) {
  3. logger.log(ex);
  4. throw ex;
  5. }

(3)如果catch块处理多个异常类型,则catch参数将隐式为final。 在本示例中,catch参数ex是final,因此您不能在catch块中为其分配任何值。
(4)finally子句一定会被执行,如果有try子句中有return语句,finally子句将会在return语句执行前执行,若没有,则最后执行。
(5)如果在执行try或catch代码时JVM退出,则finally块可能无法执行。同样,如果执行try或catch代码的线程被中断或杀死,则finally块可能不执行,即使应用程序作为一个整体继续。
(6)finally语句块只有一种情况是不会执行的,那就是在执行finally之前遇到了System.exit(0)结束程序运行。
(7)finally块是防止资源泄漏的关键工具。 当关闭文件或恢复资源时,将代码放在finally块中,以确保资源始终恢复。

声明异常

在程序中抛出异常

throw:将产生的异常抛出(动作),同时也要在方法声明中声明
所有方法都使用throw语句抛出异常。 throw语句需要一个参数:throwable 对象。
Throwable 对象是Throwable类的任何子类的实例。

  1. throw someThrowableObject;
  2. // throw 异常类实例对象;
  3. throw RuntimeException("提示");
  4. //抛出RuntimeException,作提示说明

指定方法抛出异常

  1. throws:声明j将要抛出何种类型的异常(在方法体参数列表后声明),声明的异常在方法体中可以没有抛出。
  1. // 方法名称(参数列表) throws 异常类1,异常类2,...
  2. public void writeList() throws IOException, IndexOutOfBoundsException {}