【发布时间】:2015-11-18 09:11:57
【问题描述】:
我是 Java 新手。我正在研究异常处理概念,但我在这里停留了一点。 我们知道,每当抛出异常时,Java 都会尝试以自上而下的方式查看可用的 catch 子句来查找。如果找不到,它将搜索异常超类型的处理程序。如果没有找到与异常超类型匹配的 catch 子句,则将异常沿调用堆栈传播。
此外,如果将大多数特定异常置于更通用的异常处理程序之上,则会导致编译错误。
假设我们有如下代码:-
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子句,而是会遇到编译错误。
请给它一些启示。 如果我能够解释我想要做什么,也请告诉我?
【问题讨论】:
-
这段代码无法编译,因为
try跟随另一个try块是非法语法。但是为什么你写的“第一段”要支持除了你脑子里的东西之外的任何东西?不清楚你在问什么。 -
你有没有试过在IDE中写上面提供的代码sn-p。
-
伙计们,请仔细阅读 - OP 知道代码无法编译!!! 是一个与 SO 标准相关的好问题。我们的社区应该对初学者更加宽容。 OP 试图实现他理解的异常处理,但它不起作用,他在问我们他做错了什么。为什么有人要对这样的问题投反对票,就因为它低于他们的大师级别?