异常机制是为防止发生错误时程序直接崩溃而设置的。异常做到了:●向用户报告错误●保存所有的工作结果●允许用户以妥善的方式退出程序。程序中可能出现的错误主要分为用户输入错误,设备错误,物理限制(可用存储空间已用完)和代码错误。
异常分类:在Java中所有异常对象都派生于Throwable类的一个实例。所有的异常都由Throwable派生而来,但在下一层立即分解为两个分支:Error和Expection。Error类错误一般能做的处理很少。Expection层次结构,又可以分解为两个分支:一个分支派生于RuntimeExpection;程序本身没有问题,但由于I/O错误这类问题产生的异常属于其他异常。
Java语言规范将派生于Error类或RuntimeError类的所有异常称为非受查异常。此外的异常称为受查异常。编译器为所有的受查异常提供了异常处理器。
方法应当在其首部声明所有可能抛出的异常。这样可以从首部反映这个方法可能抛出的所有受查异常。这样可以从首部反映出这个方法可能抛出哪类受查异常。在自己编写方法时,不必将所有可能抛出的异常都进行声明。至于什么时候需要在方法中用throws子句声明异常,有下面4种情况:①调用一个抛出受查异常的方法②程序运行过程中发现错误,并利用throw语句抛出一个受查异常③程序出现错误,④Java虚拟机和运行时库出现的内部错误。如果出现的是前两种情况,就必须要有处理器来捕获异常,否则当前的线程就会结束。
所有的受查异常都必须由程序设计师指定应该如何处理,如果在可能产生checked expection的方法内,程序设计师没有利用try-catch指定“异常”的处理方式,他就必须在方法的声明列上,使用throws关键字,指定由外层的方法来处理。
如果一个方法可能抛出多个受查异常类型,那么就必须在方法的首部列出所有的异常类,每个异常之间用逗号隔开。
与C++相比,因为Java从语法级别对异常进行了支持,Java的try catch语句总能捕捉到异常,而c++不一定能捕捉到异常。