为什么多捕获RuntimeException编译但多捕获异常不?

时间:2015-08-31 18:06:26

标签: java exception-handling

在此示例中,第二个catch块无法访问,因此我的代码无法编译。但是,如果我myFrame.setIconImage(yourIcon); 延长c=int(input('Please enter an amount between 0-99:')) print(c//25) print(c%25) 而不是LimpException,那么它会毫无困难地编译。为什么呢?

RuntimeException

1 个答案:

答案 0 :(得分:6)

根据JLS §11.2

  

未经检查的异常类(第11.1.1节)免于编译时检查。

这很简单。即使该代码块仍然无法访问,编译器也不会检查。

在您的示例中,LimpException无法从catch LimpException catch块尚未捕获的try语句主体中抛出。这被JLS §11.2.3禁止使用:

  

如果catch子句可以捕获已检查的异常类E1并且不是对应于catch子句的try块可以抛出作为E1的子类或超类的已检查异常类,则是编译时错误,除非E1是Exception或Exception的超类。

     

如果catch子句可以捕获(§11.2)已检查的异常类E1并且紧跟的try语句的前一个catch子句可以捕获E1或E1的超类,那么这是一个编译时错误。