栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么在这种情况下抛出检查异常类型?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么在这种情况下抛出检查异常类型?

我认为您提到的§14.18

throw
语句
中的措辞是JLS中的错误-
应该使用Java SE 7更新了该文本,而没有。

§11.2.2语句异常分析中描述了预期行为的JLS文本部分:

如果一条

throw
语句的抛出表达式是
catch
子句C的最终异常参数或实际上是最终异常参数,则该语句可以引发异常类E iff:

  • E是一个异常类,声明C
    try
    try
    语句的块可以抛出该异常类;和
  • E是与C的任何可捕获异常类兼容的分配;和
  • E与
    catch
    同一
    try
    语句中C左侧声明的子句的任何可捕获异常类的分配都不兼容。

第一个要点是相关的。因为

catch
-clause参数
t
实际上是最后的参数(意味着它从未分配,递增或递减;请参见§4.12.4
final
变量),
throwt
因此只能抛出该
try
块可能抛出的内容。

但是正如您所说,第14.18节中的编译时检查对此没有任何余地。§11.2.2不能决定允许什么和不允许什么;相反,它应该是对可能引发的各种限制的后果的分析。(此分析确实反馈到规范的更规范的部分中-§14.18本身在第二个要点中使用了它-但§14.18不能仅说“如果它抛出一个异常而无法编译,这是一个编译时错误。按照§11.2.2“进行抛出,因为那是循环的。)

因此,我认为需要对§14.18进行调整以适应§11.2.2的意图。

好发现!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446782.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号