如果一个方法抛出的异常与它所执行的任务没有明显关联关系的话,会使人感到不知所措。为了避免这个问题,应该在高层的实现中俘获底层抛出的“低级”异常,并同时用另一“高级”异常继续向外抛。
例如,如我们在方法中,有一段循环,一个一个地取集合的一下元素。当catch到一个 NoSuchElementException 或 NullPointerException 时,说明已经到头儿了。这时我们可以 new 一个 IndexOutOfBoundsException 并向上抛出。对于此方法的调用者来说,这个异常显然比前两个更有实际意义。这被称为异常转译。
但是,尽管异常转译比不加选择地传递低层异常的做法有所改进,但是这也不能被滥用。
当然,“高层”的异常也可以是你的自造异常。如一个和文件相关的操作,如果你的设计并不在意文件操作是因何而失败的话。那么你大可以将 FileNotFoundException 和 IOException 等 可能出现的“低层”异常都转化为你自己的 FileOperationException。当然,这还有一个前提,就是对照上一条先判断一下这里出现一个你自己自造的异常是否合适,还是就该使用那些标准的“低层”异常。
【Effective Java 学习笔记】系列连载专题请见:
http://tonylian.iteye.com/categories/64208
分享到:
相关推荐
使用`RAISE`语句重新抛出异常。 ##### 八、处理PL/SQL异常 通过`EXCEPTION`块来捕获和处理异常。 ##### 九、PL/SQL错误控制技巧 掌握一些错误控制技巧可以提高程序的质量。 #### 第八章:PL/SQL子程序 ##### 一、...
- 检查异常必须在编译时被捕获或声明抛出。 - 非检查异常(运行时异常)则不需要显式捕获或声明。 - **异常处理语法**: - 使用`try-catch`块来捕获异常。 - 可以使用多个`catch`块来捕获不同类型的异常。 - `...
合理使用异常处理机制,避免不必要的异常抛出,同时确保异常被捕获并妥善处理。 #### (56) 方法参数的修改 避免在方法内部修改传入的参数,以防止副作用和逻辑混乱。 #### (57) 方法参数的命名 方法参数的命名应...
第十三章 事件和索引指示器 .148 13.1 事 件 .148 13.2 索引指示器 .151 13.3 小 结 .154 第十四章 继 承 .155 14.1 C#的继承机制.155 <<page 3>> page begin==================== 14.2 多 态 性 ....
- 自定义异常的抛出与捕获。 - **【Python第37课】字典** - **主要内容**:讲解Python中的字典数据类型。 - **知识点**: - 字典的创建与访问; - 字典的增删改查操作; - 字典与其他数据结构的区别。 - **...
B) 在Java的类中可以有三类内容分别是数据的定义、基本输出语句、函数的定义。 C) Java中的封装就是将对象的数据和操作数据的方法相结合,通过方法将对象的数据和实现细节保护起来。 D) Java语言中的多态的含义可以...
- **找不到类时**:最终会抛出ClassNotFoundException异常。 #### 29. AtomicReference与compareAndSet - **AtomicReference**:原子地更新引用类型的值。 - **compareAndSet**:原子地比较并设置新值。 #### 30....
6.3.1 抛出异常 255 6.3.2 捕获异常 256 6.3.3 MFC中的异常处理 257 6.4 处理内存分配错误 258 6.5 函数重载 259 6.5.1 函数重载的概念 260 6.5.2 何时重载函数 262 6.6 函数模板 262 6.7 使用...