JAVA异常总结

 

 

Java异常体系


Throwable:Java异常体系中的根类。

Error:主要描述了系统内部错误等重大问题,此类问题一旦出现程序员通常也无能为力,一般不要求解决。

Exception:除了它的特殊子类RuntimeException外,Exception描述的都是编译时被检查的异常,称为可检查异常。

RuntimeException:程序运行时产生的异常,RuntimeException异常一旦发生,程序会终止运行,所以对其可以不进行声明和捕捉。

 

捕获异常

try块:

  •     将可能产生异常的代码放在try块中,try块中的代码会被检测。
  •     try块不能单独出现,其后要么接着catch块,要么接着finally块,要么接着catch-finally块。
  •     try块带来的好处是,将功能代码与检查错误的代码分离。

catch块:

  •     处理try块捕获到的异常。
  •     可以有多个catch块,若捕获到异常会从最上面的catch块开始匹配,所以应该将具体的异常放在上面。
  •     在catch块中除了可以做一些处理动作,还可以抛出异常。
  •     若捕获了异常,而没有catch块与之匹配,那么此异常会抛给JVM处理。

finally块:

  •     无论try块是否捕获到异常,finally块内的代码一定会被执行,通常将释放资源之类的动作放在其中。
  •     finally块不会被执行的特殊情况:System.exit(0)JVM退出、在finally内部发生未处理的异常。

try-catch-finally的一般格式:

try {
    // 需要检测的代码
} catch(Exception1 e1) {
    // 处理异常的代码
} catch(Exception2 e2) {
    // 处理异常的代码
} finally {
    // 无论发生异常与否,都需要运行的代码
}

    try-catch语句可以嵌套使用,在关闭流资源时就经常在finally块中嵌套try-catch语句。

 

抛出异常

throws:

  •     throws用来声明某方法有可能抛出异常,格式:throws 异常类型列表。
  •     如果方法可能抛出的异常为 非可检查异常(即RuntimeException、Error),不需要声明。
  •     若父类方法用throws声明了可能抛出异常,子类在覆盖该方法时声明的异常不能超出父类所声明的异常(可以不声明)。
  •     子类在覆盖父类方法时,不能声明父类方法没有声明的异常,但是可以不声明任何异常。也就是说,如果父类方法没有声明异常,子类在覆盖父类方法时也不能声明异常。例子:Thread类中的run()方法。

throw:

  •     只能出现在方法体内,用于抛出一个具体的异常对象。
  •     throw语句后的代码不会被执行到。
  •     throw一个可检查异常后,要么在方法体内捕获该异常,要么在方法上声明该异常。

    

常见异常

可检查异常:

    FileNotFoundException:找不到文件异常

    EOFException:文件结束异常。

    ClassCastException:类型转化异常。

    NoSuchFieldException:找不到域异常。

    NoSuchMethodException:找不到方法异常。

    IllegalAccessException:非法访问异常。

 

RuntimeException异常

    IndexOutOfBoundsException:角标越界异常。

    NullPointException:空指针异常。

    ClassNotFoundException:找不到类文件异常。

    ArithmeticException:算术异常。

    SecurityException:安全异常。

 

自定义异常

    如果Java提供的异常类不足以描述遇到的问题,可以定义自己的异常类。将定义好的类继承Exception或者RuntimeException即可称为异常类。在使用方式上与Java内置的异常基本一致。

 

 

(本文用到的图片来自互联网)