如果一个方法抛出的异常与它所执行的任务没有明显关联关系的话,会使人感到不知所措。为了避免这个问题,应该在高层的实现中俘获底层抛出的“低级”异常,并同时用另一“高级”异常继续向外抛。
例如,如我们在方法中,有一段循环,一个一个地取集合的一下元素。当catch到一个 NoSuchElementException 或 NullPointerException 时,说明已经到头儿了。这时我们可以 new 一个 IndexOutOfBoundsException 并向上抛出。对于此方法的调用者来说,这个异常显然比前两个更有实际意义。这被称为异常转译。
但是,尽管异常转译比不加选择地传递低层异常的做法有所改进,但是这也不能被滥用。
当然,“高层”的异常也可以是你的自造异常。如一个和文件相关的操作,如果你的设计并不在意文件操作是因何而失败的话。那么你大可以将 FileNotFoundException 和 IOException 等 可能出现的“低层”异常都转化为你自己的 FileOperationException。当然,这还有一个前提,就是对照上一条先判断一下这里出现一个你自己自造的异常是否合适,还是就该使用那些标准的“低层”异常。
【Effective Java 学习笔记】系列连载专题请见:
http://tonylian.iteye.com/categories/64208
分享到:
相关推荐
异常可以通过`throw`关键字手动抛出,也可以通过`throws`关键字声明一个方法可能抛出的异常。 课后作业中的问题涉及到抽象类、接口、内部类的特点和区别,异常处理机制以及关键字`this`、`super`、`final`的用法,...
2. **抽象错误处理**:异常处理机制是专门为处理编程中的错误而设计的,它允许程序在遇到错误时立即停止当前的操作,转而寻找适当的处理机制,而不需要依赖于函数返回值。 3. **函数跨越**:异常可以跨过多个函数...
【抽象类与接口】 ...通过抽象类和接口,开发者可以创建灵活、可扩展的代码结构,而异常处理则有助于编写健壮、易于维护的程序。这些概念是Java编程中的核心部分,对于理解和编写高质量的Java代码至关重要。
### 异常抛出(Throw) 在代码执行过程中,如果遇到无法继续正常执行的情况,如除数为零、文件不存在、内存不足等,可以通过`throw`关键字抛出异常。例如,在给定的部分代码中,`throw…;`这一行指示了函数内部在...
13. **抽象方法错误:AbstractMethodError** - 当应用试图调用一个抽象方法时,会抛出此异常,这通常意味着类加载问题或版本不兼容。 14. **断言错误:AssertionError** - 用于指示一个断言失败的情况,断言是一种...
13. **抽象方法错误**:`AbstractMethodError` - 当应用试图调用一个抽象方法,但在运行时该方法未被实现,就会抛出此异常。 14. **断言错误**:`AssertionError` - 断言失败时,会抛出此异常,通常用于测试目的。 ...
1. 抛出异常:当遇到预期之外的情况时,可以通过`throw`关键字抛出一个异常对象。例如,`throw new IllegalArgumentException("参数错误");` 2. 捕获异常:使用`try-catch`块来捕获并处理异常。`try`块包含可能会抛...
- **示例**:调用`setColor(256, 0, 0)`时,第一个参数超过了颜色分量的最大值255,会抛出此异常。 - **预防措施**:确保传递给方法的参数符合预期。 #### 6. `java.lang.IllegalAccessException` - **定义**:当...
4. `AWTException`:这是抽象窗口工具包(AWT)中的基础异常类,通常在AWT组件或事件处理中遇到错误时抛出。 5. `ClassNotFoundException`:在类加载器尝试加载类时,如果找不到指定的类,就会抛出此类异常。 6. `...
Java异常是程序运行时出现的不正常状态,它们通常由Java虚拟机(JVM)或者Java类库在遇到特定问题时抛出。异常分为两大类:Error和Exception。Error是更严重的错误,通常代表系统级的问题,而Exception则是应用程序...
当静态初始化块抛出异常,或者在执行静态初始化器之前类加载器已经抛出异常,会抛出`ExceptionInInitializerError`。 #### 19. IllegalAccessError - 非法访问错误 当一个类尝试非法访问另一个类的私有成员时,会...
- **IllegalAccessError**:当一个应用试图访问、修改某个类的域或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。 - **IncompatibleClassChangeError**:当正在执行的方法所依赖的类定义发生了不...
- **AbstractMethodError**: 当应用试图调用抽象方法时抛出。 - **AssertionError**: 断言失败时抛出。 - **ClassCircularityError**: 类之间存在循环依赖时抛出。 - **ClassFormatError**: 类文件不符合有效...
这样的方法存在于抽象类中,抽象类不能被实例化,只能作为其他类的父类。当一个类包含抽象方法时,该类必须被声明为抽象类。子类继承抽象类后,必须实现其所有抽象方法,否则子类也将成为抽象类。 现在我们来看如何...
第九讲的主题是过程抽象与异常处理,这是面向对象设计方法中的重要组成部分,旨在提升软件的安全性和可靠性。在这一单元中,我们将深入探讨规格化的面向对象设计,以确保软件设计的正确性和可测试性。 首先,规格的...
try块用于包含可能会抛出异常的代码,catch块则用于捕获并处理try块中抛出的异常。finally块中的代码无论是否发生异常都会被执行,常用来关闭打开的资源,如数据库连接。 在处理异常时,应该尽可能捕获更具体的异常...
当try块中的代码抛出异常时,控制权转移到与该异常匹配的第一个catch块。 2. **throw**:用于显式地抛出一个异常。通常用于抛出自定义异常或在运行时发现程序状态不可接受的情况下。 3. **throws**:用于声明一个...
当发生特定的业务错误时,可以抛出自定义异常,并使用相应的错误码和错误消息: ```java throw new MyBusinessException(BusinessConstants.ERROR_CODE_INVALID_INPUT, BusinessConstants.ERROR_MSG_INVALID_INPUT)...
java.lang.LinkageError 是一种链接错误,指的是在程序中某个类依赖于另外一些类,但是这些类的定义发生了变化时抛出的异常。 24. java.lang.NoClassDefFoundError 未找到类定义错误 java.lang....
- **`AbstractMethodError`**:类中未实现抽象方法时抛出。 - **`ClassCircularityError`**:检测到类继承循环时抛出。 - **`ClassFormatError`**:类文件格式错误时抛出。 - **`ErrorInInitializerError`**:静态...