办?使用这些数据的人或设备将收到一份不完整 的(因而也是错误的)数据,却得不到任何有关这份数据是否完整的提示。对于有些系统来 说,数据不完整可能比
系统停止运行带来更大的损失。 较为理想的处置办法是向输出设备写一些信息, 声明数据的不完整性; 另一种可能有效的办
法是,先缓冲要输出的数据,准备好全部数据之后再一次
性输出。 结论六:全面考虑可能出现的异常以及这些异常对执行流程的影响。 改写后的代码 根据上面的讨论,下面给出改写后的代码。也许有人会说它稍微有点?嗦,但是它有了比较 完备的异常处理机制。 OutputStreamWriter out = ... java.sql.Connection conn = ... try { Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery( "select uid, name from user"); while (rs.next()) { out.println("ID:" + rs.getString("uid") + ",: " + rs.getString("name")); } } catch(SQLException sqlex) { out.println("警告:数据不完整"); throw new ApplicationException("读取数据时出现 SQL 错误",
sqlex); } catch(IOException ioex) {
throw new ApplicationException("写入数据时出现 IO 错误", ioex); } finally { if (conn != null) { try { conn.close(); } catch(SQLException sqlex2) { System.err(this.getClass().getName() + ".mymethod - 不 能 关 闭 数 据 库 连 接 : " + sqlex2.toString()); } } if (out != null) { try { out.close(); } catch(IOException ioex2) { System.err(this.getClass().getName() + ".mymethod - 不能关闭输出文件" + ioex2.toString()); }
} }
本文的结论不是放之四海皆准的教条, 有时常识和经验才是最好的老师。 如果你对自己 的做法没有百分之百的信心,务必加上详细、全面的注释。 另一方面,不要笑话这些错误,不妨问问你自己是否真地彻底摆脱了这些坏习惯。即使最有 经验的程序员偶尔也会误入歧途,原因很简单,因为它们确确实实带来了“方便” 。所有这 些反例都可以看作 Java 编程世界的恶魔,它们美丽动人,无孔不入,时刻诱惑着你。也许 有人会认为这些都属于鸡皮蒜毛的小事,不足挂齿,但请记住:勿以恶小而为之,勿以善小 而不为。
------------------------------------------------------------------ 下 面 是 一 些 ----------------------------------------------------------------- -------------------------算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异常:NumberFormatException 操作数据库异常:SQLException 输入输出异常:IOException 方法未找到异常:NoSuchMethodException java.lang.AbstractMethodError
java
异 常 集
抽象方法错误。当应用试图调用抽象方法时抛出。 java.lang.AssertionError 断言错。用来指示一个断言失败的情况。 java.lang.ClassCircularityError 类循环依赖错误。在初始化一个类时,若检测到类之间循环依赖则抛出该异常。 java.lang.ClassFormatError 类格式错误。当 Java 虚拟机试图从一个文件中读
取 Java 类,而检测到该文件的内容不符合 类的有效格式时抛出。 java.lang.Error 错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应 用程序捕获的反常情况。 java.lang.ExceptionInInitializerError 初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异常时抛出。静态初始 化程序是指直接包含于类中的 st