异常是由Throwable类派生的。
常见异常:数组下标越界,算法溢出(超出了数值表达范围),除数为零,无效参数,内存溢出等。
Java的异常处理功能使得程序能够主动去捕获错误和异常,从而不会任由错误出现并产生更大的麻烦。
通常是在故障诊断和故障处理不在同一位置的情况下使用。即适用于在一个方法中可以检测出错误但不能处理错误的情况。
主要用于处理一些同步错误,不宜处理异步事件。
异常处理用助于提高程序的容错性。
异常处理是为了错误处理而设计的,但这种动作很少发生,因为当异常发生时,它会占用额外的执行时间,这会降低程序的性能。
异常处理可以看做是从方法中返回或退出程序块的另一种方式。
Java采用的是终止方式的异常处理。
异常处理用于下列情况:
1. 当方法由于其他不可控制的原因而无法实现其功能时;
2. 处理来自某些程序组件的异常,在这些组件中不适合直接处理异常;
3. 在大型项目中,对于每个项目都以一致的方式进行错误处理。
产生异常的代码包含在一个try程序块中,其后紧跟着一个或多个catch程序块,用于指定它所能捕获的异常类型以及一个相应的异常处理程序。在最后一个catch程序块后面提供一个可选的finally程序块。不管是否发生异常,finally程序块都会执行。finally程序块主要是进行资源释放操作,以免资源泄漏。
try {
...
}
catch( ) {
...
}
catch语句块只能有一个参数
catch( Exception e )必须放在所有catch语句块的最后,否则会阻止其他语句块的执行。
使用throws子句来指定要抛出的异常。其位置称为抛出点。
对于某一类型的异常,很可能有几个异常处理程序都与之匹配,在执行时,将由所遇到的第一个异常处理程序与之匹配。
如果在执行某个异常处理程序时又抛出一个异常,此时出现的异常必须由原try程序块的外层程序处理。
重抛出异常——在catch处理程序中,当其不能处理捕获到的异常时,或是需要其他的catch块来处理该异常时,可以通过throw语句重抛出该异常,将其抛到下一个try程序块中。
在一个方法中,利用throws子句列出该方法的所能抛出的异常。
int g ( float f ) throws a, b, c
{
// method body
}
除了以下两种错误和异常无须列出,其他异常必须用throws子句列出来。
1. Error——是指严重系统问题,大多数用户没有必要处理这些问题。
2. RuntimeException——运行时异常,是由某些本来可以避免的事情出现的错误,应该直接进行处理。
子类方法的throws清单应是超类方法的throws清单的子集。
IOException 异常——输入/输出和文件处理过程中可能产生的”经过检查的“异常。
AWTException异常——“经过检查的”异常,通过各种抽象窗口化工具箱(AWT)的方法将其抛出。
在构造函数中检测出错误,较好的处理方法是抛出一个异常到外部。
异常继承
如果catch程序块可以捕获一个超类类型的异常,那么它也可以捕获该超类所有子类的异常对象。
如此允许相关错误的多态处理。
Java的异常处理机制主要是为了将错误处理代码与程序代码的主线分离开,以提高程序的清晰度。为了保证程序的可读性,在程序中比较重要的部分设置try程序块,然后再分别设置几个catch程序块来处理不同的错误,最后再添加finally程序块。
printStackTrace() 由Throwable类提供
在某个已被捕获的Exception对象中使用该方法,就可以将方法调用的堆栈内容打印出来。有助于测试和调试。
getMessage()
用于返回保存在某个异常中国的描述字符串。