本篇对Java Throwable体系进行梳理,同时讨论下try-catch和return的执行顺序。
Throwable体系
Exception和Error
因为在java中,能通过代码处理的我们叫做Exception,而我们不能处理的叫做Error。
Error指的是那些例如:JVM运行错误,栈空间用尽,类定义错误等等非常严重的问题。一旦出现错误,我们不能通过代码进行处理,所以编码要注意避免Error。
Exception我们是可以通过try-catch处理的,即使发生了Exception我们也可以通过适当的处理来保持程序正常的运行。
运行时异常(RuntimeException)和非运行时异常
运行时异常是没办法预料的,例如NullPointerException,IndexOutOfBoundsException,ClassCastException,OutOfMemoryException,IllegalArgumentException 等等,编译器发现不了也不会提醒,只有在运行期才会出现,不过我们可以主动try-catch来处理异常。
非运行时时显而易见可能会出错的,编译器会提前提醒我们要对非运行时异常进行处理,try-catch或者声明throws都可以,例如IOException,FileNotFoundExcetion,SQLException,NoSuchMethodException ,InvocationTargetException等等。
我们在throw Exception的时候,如果throw的是RuntimeExcepiton,那么编译器不会提醒我们进行任何处理,但若是非运行时异常则会提醒我们try-catch或者声明throws。
try-catch和return
不管是在try中return,还是在catch中return,都会在return之前执行finally的代码。
return要是返回一个表达式,则会在表达式运算完成之后才执行finally的代码。
若在finally之中有return,则直接return。
注意throw Exception的时候是直接返回,其它什么代码都不会执行的。
还有System.exit(0)也是什么都不执行的,虚拟机都退出了。