在Java中,所有异常都来自一个祖先Java.lang包中的Throwable类。
Throwable有两个重要子类:Error(错误)、Exception(异常)
Error:表示程序中比较严重的问题,大多数与代码的编写者执行的操作无关,而表示虚拟机有问题,比如Virtual MachineError。发生在虚拟机自身或者发生在虚拟机试图执行的应用时。这些错误是不可查的,在应用程序控制和处理之外。
Exception:有个重要子类RuntimeException(运行时异常),由虚拟机抛出异常,比如NullPointerException(要访问的变量没有引用任何对象),ArithmeticException(算术运算符,整除0),ArrayIndexOutOfBoundsException(下标越界)
区别:异常能被程序本身处理,错误无法处理
Throwable类常用的方法:
public String getMessage() 返回异常发生时的详细信息
public String toString() 返回异常发生时的简要信息
public String getLocalizedMessage 返回异常对象的本地化信息,使用Throwable的子类覆盖,否则和返回的信息和getMessage一样
public void printStackTrace() 在控制台打印Throwable对象封装的异常信息
异常处理总结:
try块,用于捕获异常,后可跟多个cache,如果没有cache必须跟一个finally
catch,用于处理try捕获的异常
finally,无论异常是否捕捉,finally块里的语句都必须被执行。当在try块或cache块中遇到return时,finally语句执行在return语句之前。
以下4中模块,finally不会被执行:
finally块语句发生错误
程序所在线程死亡
关闭CPU
前面的代码执行了System.exit()