http://blog.csdn.net/lu_ca/article/details/52184423 这一篇,讲解的非常好。
Java的异常分为两类,Throwable是最基本的,它的下面分为Error和Exception。
Error主要指JVM运行时错误,内存溢出,栈溢出,JVM奔溃等, 是属于不可查的,也是无法处理的。
Exception包括可查异常,不可查异常。
常见的异常包括数组越界,空指针引用,算术运算错误,非法参数错误等。
异常的处理有两种方式,一种是try{}catch{},另一种是直接在方法中throws。在try,catch中,如果有多个catch,当前catch捕获不到,则会往上抛,直到能够接受。假如还没有的话,则直接报异常。
对于try{}catch{}finally{}中。只有以下情况finally不会执行,一种是在finally之前执行了System.exit(1),另一种是虚拟机发生异常报错。
对于try,catch,finally的代码块中,主要分以下几种情况进行判断。
对于不抛出异常的try中的return,分以下几种情况进行判断。
如果程序执行完try后,会去搜索是否用finally。如果没有,则在return中返回值,执行完毕。
如果有finally,如果finally有能够终止程序的代码,或者是有return,则程序执行完finally后,不会执行try中的return。
如果在finally,没有能够终止程序的代码,则程序执行完finally后,会回到try,返回try中的return值。