- <!--[if !supportLists]--> <!--[endif]-->异常(exception)机制
将程序执行时可能发生的错误分为两种:exception和error(编译时遇到的错误一般是语法错误,不包括在此列)。exception一般是非致命性的,通过某种修正后程序可继续执行。例如打开一个不存在的文件;又比如除零溢出、数组越界访问等。error一般是致命的,使程序陷入严重的不正常状态,不能简单地恢复执行,比如程序执行过程中内存耗尽。
当方法执行时有错误发生时,方法会创建一个异常对象将异常传递给运行时系统,这个过程就叫“抛出(throw)异常”。异常对象封装了错误信息,包括错误类型和程序状态。
异常发生时,java运行时系统从生成异常对象的代码段开始,沿方法调用栈逐次回溯,直到找到相应的异常处理代码为止,并把异常对象传递给该方法处理,这一过程成为捕获(catch)。
try-catch-finally
try {
// 可能产生异常的代码,放在try-block中称为“保护代码”
} catch (ExceptionType1 e) { // 捕获ExceptionType1异常时要执行的代码 }
catch (ExceptionType2 e) { // 捕获ExceptionType2异常时要执行的代码 }
……
catch (ExcepionTypek e) { // 捕获ExceptionTypek异常时要执行的代码 }
finally { // 无论是否捕获异常都必须执行的代码,除非在try-block中调用了
// System.exit ( )方法;
// 一般地,为了统一处理程序出口,可将需公共处理的内容放到其中
}
Java中预定的常见异常
1. ArithmeticException 零除数溢出
2. NullPointerException 空引用异常
3. NegativeArraySizeExcepion
4. ArrayIndexOutOfBoundsException 数组下标越界
5. SecurityException 该类异常一般在浏览器内抛出。若Applet试图进行下列操作,则由SecurityManager类抛出此异常:
(1) 访问本地文件;
(2) 打开一个socket,而不是返回到提供Applet的主机;
(3) 在运行时环境中运行另一个程序。
6. ArrayStoreException 程序试图存取数组中错误的数据类型
7. FileNotFoundException
8. IOException
9. SQLException
10. NumberFormatException
例如:Double.parseDouble(aStr);
当aStr内容是非数值时,会抛出NumberFormatException异常