一、 常见的未检查异常
l 算术异常 ArithmeticException
u ArithmeticException出现的最常见的原因就是发生了整数除0。
l 数组存值异常 ArrayStoreException
u 通常情况下IDE会报告这类异常,但是如果数组的引用类型是Object就不会报错。所以一定要最小化数组的类型,能声明确定类型的就不要用Object类型。程序员只要在为数组元素赋值时注意元素的类型,就可以避免这个异常。
l 数组下标越界异常 ArrayIndexOutOfBoundsException
n 非法索引访问数组时抛出该异常
u 如果要遍历数组中的所有元素,则推荐使用加强版的for循环,它可以避免数组的下标运算。如果要使用数组的下标,如果需要使用数组的长度,则推荐使用length属性。另外,使用ArrayList类也可以避免这些问题。
l 空指针异常 NullPointerException
n 当应用程序试图在需要对象的地方使用null时,抛出该异常。这些情况包括:
- 调用null对象的实例方法
- 访问或修改null对象的字段
- 将null作为一个数组,获得其长度
- 将null作为一个数组,访问或修改其元素值
- 将null作为Throwable值抛出
u 推荐在创建引用类型变量之后立即对其赋值,这样可以避免以后出现空指针异常。如果不能立即执行赋值操作,则在使用引用变量时,使用条件判断语句,先判断是否为空,再使用相关的方法。
二、 常见的已检查异常
l 类未发现异常 ClassNotFoundException
n 当应用程序试图使用以下方法通过字符串名加载类时,抛出该异常。例如:
- Class类中的forName方法
- ClassLoader类中的findSystemClass方法
- ClassLoader类中的loadClass方法
u 如果使用IDE,则会对用户直接使用的不存在的类进行提示。如果使用Class类来加载类,则可以根据输出的异常信息来判断有没有引入相关的jar包。
l 非法访问异常 IllegalAccessException
n IllegalAccessException 是当应用程序试图反射性地创建一个实例(而不是数组)、设置或获取一个字段,或者调用一个方法,但当前正在执行的方法无法访问指定类、字段、方法或构造方法的定义时抛出的异常。
u 出现该异常最常见的情况是在有安全管理器的情况下使用反射设置私有域的值。如果要修改该值,则必须使用setAccessible()修改其可见性。对于应用程序员而言,通常不能使用反射来访问私有域。
l 文件未发现异常 FileNotFoundException
n FileNotFoundException在试图打开指定路径名表示的文件失败时抛出。在不存在具体指定路径名的文件时,该异常将由FileInputStream、FileOutputStream和RandomAccessFile构造方法抛出。如果该文件存在,但是由于某些原因不可访问,如试图打开一个只读文件进行写入,则此时这些构造方法仍然会抛出该异常。
u 如果不能确定文件是否存在,则可以使用File类的exists()方法进行判断。如果返回值为真,则可以进行流操作;否则需要提示用户文件不存在。也可以使用文件选择器让用户来选择需要操作的文件(非只读文件),这样可以避免该异常。
l 数据库操作异常 SQLException
n SQLException提供 关于数据库访问错误或其它错误的异常。它可以提供以下消息:
- 描述错误的字符串
- "SQLstate"字符串,该字符串遵守XOPEN SQLstate约定或SQL:2003约定
- 特定于每个供应商的整数错误代码
- 到下一个Exception的链接
- 因果关系,如果存在任何导致此SQLException的原因
u 在使用JDBC连接数据库时,会出现大量的SQLException。为了让代码更加简洁,推荐使用Commons DbUtils组件来进行JDBC操作。