我是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子句,而是遇到编译错误。
请注意一下。 还让我知道如果我能够解释我想要的是什么?
答案 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