1. 异常分类 Java中所有异常都是java.lang.Throwable的子类,其两个直接子类为Error和Exception。

Error 错误,JVM内部的严重问题,比如资源不足等。无法恢复。它属于非受检异常(unchecked exception)。如java.lang.StackOverflowError、java.lang.OutOfMemoryError、 java.lang.NoSuchMethodError。处理方式: 程序员不用处理

Exception 又分为运行时异常RuntimeException和其他异常,或者说分为非受检异常(unchecked exception)和受检异常(checked exception)。除RuntimeException之外的其他Exception,都属于checkedException,它们都在java.lang库内部定义。它们属于普通的问题。通过合理的处理,程序还可以回到正常执行流程,是可恢复的。处理方式: Java编译器要求程序必须捕获或声明抛出这种异常。一个方法必须通过throws语句在方法的声明部分说明它可能抛出但并未捕获的所有checkedException。

RuntimeException 运行时异常、也是非受检异常。通常是程序员的代码逻辑问题导致的,在默认情况下会得到自动处理。所以通常用不着捕获RuntimeException,但在自己的封装里,也许仍然要选择抛出一部分RuntimeException。处理方式: 可处理也可不处理。

  1. 非受检异常和受检异常 非受检异常主要包括Error(错误)和RuntimeException(运行时异常); 受检异常就是除了RuntimeException之外的所有Exception及其子类。 区分是使用受检异常还是非受检异常,主要的原则就是:如果你相信一种情况可能允许恢复,就使用受检异常;如果不是,就使用运行时异常(非受检异常。如果不清楚是否可能恢复,最好使用非受检异常(摘自《Effective Java》第2版第58条)。
  2. 常见受检异常
java.lang.ClassNotFoundException
java.lang.CloneNotSupportedException
java.lang.IllegalAccessException
java.lang.InterruptedException
java.lang.NoSuchFieldException
java.lang.NoSuchMetodException
java.io.IOException
java.io.FileNotFoundException


  1. 常见非受检异常
java.lang.ArithmeticException
java.lang.ArrayStoreExcetpion
java.lang.ClassCastException
java.lang.IllegalArgumentException
java.lang.IllegalThreadStateException
java.lang.NumberFormatException
java.lang.IndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.StringIndexOutOfBoundsException
java.lang.NullPointerException
java.lang.SecurityException
java.lang.UnsupprotedOperationException
java.util.ConcurrentModificationException