Java的异常机制主要依赖try-catch-finally、throws、throw五个关键字。throws主 要在方法签名中使用,声明方法可能抛出的异常;throw抛出一个实际异常。
Java将异常分为两种,checked异常(编译阶段)和runtime异常(运行阶段)。
异常继承关系
error错误,一般指与虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败等,这种错误无法恢复或不可捕捉,将导致应用中断,不应使用catch来捕获error对象。
异常捕获时,要先捕获小异常,再捕获大异常,父类应排在子类异常后面。
使用一个catch块捕获多种类型的异常时要注意:
①多种异常类型之间用竖线(|)隔开;
②异常变量有隐式final修饰,不能对其重新赋值。
访问异常信息
所有异常对象都包含的常用方法:
①getMessage():返回异常的详细描述字符串。
②printStackTrace():将跟踪栈信息输出到标准错误输出。
③printStackTrace(PrintStream s):将跟踪栈信息输出到指定输出流。
④getStackTrace():返回异常的跟踪栈信息。
Java程序执行try-catch块时遇到return或throw语句会立即结束方法,但系统不会结束该方法,而是去找finally,如果没有finally,程序执行return或throw,方法结束;如果有finally,系统执行finally,之后调回try-catch块的return或throw,结束方法。如果finally中存在return或throw将导致方法结束,不会跳回try-catch。
catch和throw同时使用
一个异常出现,单靠某个方法无法完全处理异常,需要几个方法同时协作处理异常。异常出现的当前方法中,程序只做部分处理,还需要再调用者中进行余下处理,所以应该再次抛出异常,使该方法的调用者也能捕获到异常。这时就需要catch和throw配合使用。
异常链
捕获一个异常,然后抛出另一个异常,冰雹原始异常信息保存下来是一种经典的链式处理,也称“异常链”。
异常处理目标
①使程序代码混乱最小化;
②捕获并保留诊断信息;
③通知合适的人员;
④采用合适的方式结束异常活动。