Throwable类是所有异常的超类。它有两个子类Error和Exception。
Error类及其子类由Java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等。Java程序不应捕获这些异常。
Exception类及其子类代表Java程序中可能发生的异常,并且应用程序可以捕获这些异常。
Java将异常分成两种类型:编译时检查性异常(checked exception)和非检查性异常(unchecked exception,又称运行时异常)。
对于检查性异常,在程序中必须对其进行处理,否则编译器会指出错误。对于非检查性异常,程序中可以不做处理,直接由运行时系统来处理。编译器要求Java程序必须捕获或声明所有的编译时异常(或称非运行时异常)。
Runtime Exception异常时Java虚拟机在运行时生成的异常,如被零除等系统错误、数组下标超范围等,其产生比较频繁,处理麻烦,对程序可读性和运行效率影响很大。因此由系统检查,用户可不做处理,系统将它们交给缺省的异常处理程序。当然,必要时,用户可对其进行处理。
常见的异常:
ArithmeticException:算术运算溢出。如除数为零。
ArrayIndexOutOfBandsException:数组下标越界异常。
ArrayStoreException:数组储存异常。数组复制时,若源数组和目标数组的类型不一致时,导致异常。
NullPointerException:空指针异常。
NumberFormatException:数据格式异常。将字符串(含有非数字)直接转换成数值时产生。
OutOfMemoryException:内存溢出异常。在创建一个对象时,由于申请的内容空间过大,导致系统内存不够。
IOException:输入/输出中的异常。
FileNotFoundException:文件找不到异常。
NoClassDefFoundException:没有找到类定义时的异常。
异常的捕获处理:try、catch、finally
try:指定一段代码,这段代码就是一次捕获并处理异常的范围。
catch:用于捕获try代码块所产生的异常,并做出相应的处理。
finally:通常finally语句中可以进行资源的清除工作,如关闭打开的文件等。