import java.io.IOException;
public class ExceptionTryCatchTest {
public void doSomething() throws IOException{
System.out.println("do somthing");
}
public static void main(String[] args){
ExceptionTryCatchTest etct = new ExceptionTryCatchTest();
try {
etct.doSomething();
} catch (Exception e) {
} catch (IOException e) {
}
}
}
问题:上述程序能否编译通过?为什么?
解答:不能编译通过。因为编译的时候会报错:已捕捉到异常 java.io.IOException。 catch(IOException e)这句有错误。
分析:对于try..catch捕获异常的形式来说,对于异常的捕获,可以有多个catch。对于try里面发生的异常,他会根据发生的异常和catch里面的进行匹配(怎么匹配,按照catch块从上往下匹配),当它匹配某一个catch块的时候,他就直接进入到这个catch块里面去了,后面在再有catch块的话,它不做任何处理,直接跳过去,全部忽略掉。如果有finally的话进入到finally里面继续执行。换句话说,如果有匹配的catch,它就会忽略掉这个catch后面所有的catch。对我们这个方法来说,抛出的是IOException,当执行etct.doSomething();时,可能会抛出IOException,一但抛出IOException,它首先进入到catch (Exception e) {}里面,先和Exception匹配,由于OExceptionextends Exception,根据多态的原则,IOException是匹配Exception的,所以程序就会进入到catch (Exception e) {}里面,进入到第一个catch后,后面的catch都不会执行了,所以catch (IOException e) {}永远都执行不到,就给我们报出了前面的错误:已捕捉到异常 java.io.IOException。
总结:在写异常处理的时候,一定要把异常范围小的放在前面,范围大的放在后面,Exception这个异常的根类一定要刚在最后一个catch里面,如果放在前面或者中间,任何异常都会和Exception匹配的,就会报已捕获到...异常的错误。
分享到:
- 2009-02-28 01:13
- 浏览 14733
- 评论(1)
- 论坛回复 / 浏览 (1 / 4299)
- 查看更多
相关推荐
7. **多个catch块**: - 一个`try`语句可以跟多个`catch`块,每个`catch`捕获不同类型的异常,按照捕获异常类型的优先级顺序排列。 8. **异常链**: - 当一个异常在处理另一个异常的过程中被抛出,可以形成异常链...
- 当有多个catch块时,应该按照子类异常到父类异常的顺序排列。 - 错误的顺序可能导致某些catch块永远无法执行。 - 示例代码: ```java try { FileInputStream fii = new FileInputStream("zah.txt"); fii.read()...
因为子类异常可以向上转型为父类异常,所以当多个`catch`块捕获的异常类型有继承关系时,应该先捕获子类异常,再捕获父类异常。这样可以确保更具体的异常先被处理,避免父类异常捕获到子类异常导致处理不当。 总之...
这里,`catch`块可以有多个,按照匹配顺序捕获异常,即先匹配具体的异常类,再匹配父类。如果一个`catch`块已经捕获了异常,后面的`catch`块将不再执行。`finally`块用于放置必须执行的清理代码,即使发生异常也会...
1. **异常优先级**:当多个异常处理器都可以处理某种类型的异常时,优先级较高的异常处理器将先被调用。例如,如果一个方法既可以捕获`MyFirstException`也可以捕获`MySecondException`,则需要根据异常的具体类型来...
在实际开发中,我们需要注意异常处理,例如在上述示例中使用了try-catch块来捕获可能抛出的`IOException`。此外,记得在读取完文件后关闭打开的流,以释放系统资源。 至于`Java.jpg`文件,它通常表示一个图片文件,...
多个`catch`块可以处理不同类型的异常。 4. **异常的处理**:一旦异常被捕获,我们可以在`catch`块中进行相应的处理,如记录日志、提示用户、恢复状态等。`finally`块用于包含无论是否发生异常都需要执行的代码,如...
* 异常的捕获:Java中的异常可以通过try-catch语句捕获。 六、Java中的IO操作 * 文件的读写:Java中的文件可以通过文件流进行读写操作。 * 流的传递方式:Java中的流可以通过串行或并行方式传递。 七、Java中的...
一个try块后面可以跟随多个catch块,分别捕获不同类型的异常。 3. **finally**:无论是否发生异常,finally块中的代码都会被执行。这非常有用,尤其是在关闭资源或者执行清理操作时。 4. **throw**:用于抛出一个...
可以有多个catch块,按照优先级顺序排列。 3. **throw**:用于抛出自定义的异常或Java预定义的异常。 4. **throws**:用于声明方法可能抛出的异常,这样调用者可以选择是否进一步处理这些异常。 5. **finally*...
* 知识点:Java 中的方法重载允许定义多个同名的方法,只要它们的形式参数的个数、类型或顺序各不相同。 17. 异常处理 * 知识点:Java 中的异常处理可以使用 try-catch 语句来捕获和处理异常。 本题库涵盖了 Java...
如果一个try块中存在多个catch块,它们将按照从上到下的顺序依次匹配捕获异常,一旦匹配成功,其他的catch块将不再执行。finally块是可选的,无论是否发生异常,finally块中的代码都会被执行,通常用于释放资源,...
3. 多个`catch`块可以处理不同类型的异常,按异常类型从具体到抽象的顺序排列,防止更具体的异常被更一般的异常块捕获。 4. `finally`块:无论是否发生异常,`finally`块中的代码都会被执行,常用于资源清理,如关闭...
例如,如果一个try块后有多个catch块,必须保证从子类异常到父类异常的顺序,否则可能会导致某些异常永远无法被捕获。此外,finally块虽然总是被执行,但如果在finally块内部发生异常,则可能导致原本的异常信息被...
在使用多个catch块处理异常时,应注意异常的顺序,通常先捕获子类异常,再捕获父类异常,避免因为顺序错误导致某些异常未被正确捕获。 总之,异常处理是Java编程中的一个重要组成部分,了解和掌握异常的分类、处理...
- **异常类型的连用**:可以使用多个catch块来捕获不同类型的异常。这通常用于处理优先级不同的异常情况。 - **连用条件**:catch块之间的异常类型应该是父子类关系,即父类异常应该位于所有子类异常之后,以确保...
多个`catch`可以处理不同类型的异常,顺序很重要,因为子类异常应排在父类异常前面。如果子类异常被捕捉,父类异常就不再匹配。例如,先捕获`ArrayIndexOutOfBoundsException`(它是`Exception`的子类),然后再...
在catch块中,可以使用多个catch语句来捕获不同的异常类型。但是,需要注意的是,catch块的顺序很重要,子类异常必须在父类异常之前被捕获。 ```java try { // 可能会抛出异常的语句 } catch ...
Java提供了try-catch-finally语句来捕获和处理异常。 8. Java语言的特点:Java语言有多种特点,包括简单易学、面向对象、平台无关性、分布性、可靠性和安全性。 9. Java技术的三个方面:Java技术主要包括三个方面...
- `try`块可以跟多个`catch`块,每个`catch`块用于处理特定类型的异常。 - 示例: ```java try { readFromFile("foo"); } catch (FileNotFoundException e) { // 处理文件未找到错误 } catch (IOException e...