这是关于Java中的异常处理和异常匹配概念

时间:2015-11-18 09:11:58

标签: java exception-handling

我是Java新手。我正在经历异常处理概念,但我在这里坚持了一点。 我们知道每当抛出异常时,Java将尝试通过以自上而下的方式查看可用的catch子句来查找。如果它找不到,它将搜索Exception的超类型的处理程序。如果它没有找到与该异常的超类型匹配的catch子句,则该异常将沿着调用堆栈向下传播。 / p>

此外,如果大多数特定异常位于更一般的异常处理程序之上,则会导致COmpilation错误。

假设我们有一个如下所示的代码: -

try{
    // do not know what kind of exception it will be throwing but I am sure that it is IOException
   }

try{
     // Here the FileNotFoundException is thrown
   }

catch(IOException e){
//Do exception handling stuff
}

catch(FileNotFoundException f){
  //Do exception handling stuff`
 }

现在这段代码会导致编译错误,因为异常的超类型存在于实际异常之上。

那么为什么第一段不支持这个概念。即检查后,JVM将找到相应的异常(FileNotFoundException),不应该打扰IOException子句,而是遇到编译错误。

请注意一下。 还让我知道如果我能够解释我想要的是什么?

3 个答案:

答案 0 :(得分:0)

看起来你误解了这个尝试概念。你只有一次尝试后跟catch子句。

try{
    // do not know what kind of exception it will be throwing but I am sure that it is IOException
   // Here the FileNotFoundException is thrown
}

catch(IOException e){
    //Do exception handling stuff
}

catch(FileNotFoundException f){
  //Do exception handling stuff`
 }

答案 1 :(得分:0)

此代码将在编译时抛出错误,因为对于FileNotFound Catch Block,代码将无法访问,因为它已由IO异常处理,而FileNotFound是IOException的子类

FileNotFoundException的无法访问的catch块。它已由IOException的catch块处理

FileNotFoundException是IOException的子类,它允许我们选择将所有IOExceptions视为相同,或者单独捕获一些IOExceptions子类

答案 2 :(得分:0)

代码段存在根本性错误

如果try块中发生异常,则该异常由与之关联的异常处理程序处理。要将异常处理程序与try块关联,必须在其后面放置一个catch块

推荐阅读:

https://docs.oracle.com/javase/tutorial/essential/exceptions/try.html https://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html