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