java中异常处理机制的简单原理
异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。遇到错误后,方法立即返回,并不返回一个值,同时抛出一个异常对象,调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常处理器,并执行其中的代码。
异常的分类:
基类是Throwable。
Error和Exception继承Throwable。
RumtimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。
Error类体系
描述了java运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般都是由jvm抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在进行程序设计时,应该更关注Exception体系。
Exception类体系
Exception体系包括RuntimeException体系和非RuntimeException的体系。
其中RuntimeException体系包括错误类型的转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。
其他非RuntimeException异常(如IOExcption等等)
这类异常一般是外部错误,例如试图从文件尾部读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。
C++中异常分类和java中异常分类的不同之处
其实,在java中RuntimeException这个类名起的并不恰当,因为任何异常都是运行时出现的(在编译时出现的错误并不是异常,换句话说,异常就是为了解决程序运行时出现的错误)。
C++中logic_error与java中的RuntimeException是等价的,而runtime_error与java中非RuntimeException类型的异常是等价的。
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。