异常处理机制
Java语言采用面向对象的方法来处理异常。其异常处理的机制是:
(1) 当方法执行过程中出现错误而干扰了程序正常流程时,会抛出一个异常,即构造出一个异常类的对象。
(2) 异常类对象代表当前出现的一个具体异常,该对象封装了异常的有关信息。
(3) Java虚拟机在方法调用栈中寻找能处理该异常的catch子句。它首先检查当前方法是否存在这样的catch子句,如果存在,那么就该执行catch子句;否则,沿方法调用栈中调用顺序的反方向,传递异常对象,寻找能处理该异常的catch子句。如果始终没有这样的catch子句,Java虚拟机打印方法调用栈的异常信息,终止当前线程。
该异常处理机制对应的Java语句是 try-catch-finally 语句。
一般来说,一个异常处理应该完成以下三个工作: 抛出异常,根据异常类型产生异常对象; 捕获异常; 处理异常。
异常处理的原则:
(1) 异常只能用于非正常的情况。
(2) 不要在catch子句中忽略被捕获的异常。
(3) 在catch子句中指定具体的异常类型。
(4) 避免过于庞大的catch子句。
异常处理的优点:
(1) Java异常处理机制给错误进行了统一的分类,通过扩展Exception类或其子类来实现。从而避免了相同的错误可能在不同的方法中具有不同的错误信息。在不同的方法中出现相同的错误时,只需要throw 相同的异常对象即可。
(2) 可以精确的定位到导致程序出错的源代码位置,并获得详细的错误信息。通过异常类,可以给异常更为详细,对用户更为有用的错误信息,以便于用户进行跟踪和调试程序。
(3) 把正确的返回结果与错误信息分离,降低了程序的复杂度,调用者无需要对返回结果进行更多的了解。
(4) 强制调用者进行异常处理,提高程序的质量。当一个方法声明需要抛出一个异常时,那么调用者必须使用try…catch块对异常进行处理,当然调用者也可以让异常继续往上一层抛出。
异常处理的缺点:
(1) 产生许多难以理解的代码;
(2) 导致异常被不断的封装成另一个异常后再抛出;
(3) 导致破坏接口方法。