所以,在文档例如:java.lang.Integer.parseInt
中,我注意到代码头是:
if (firstBody.categoryBitMask & missileCategory) != 0 &&
(secondBody.categoryBitMask & alienCategory) != 0 {
destroyAlien(firstBody.node as? SKSpriteNode, alien: secondBody.node as? SKSpriteNode)
}
}
但是,如果有一个类似public static int parseInt(String s) throws NumberFormatException
的语句,代码就可以在没有int i = Integer.parseInt(someString);
块的情况下编译好。
现在,另一方面,如果我用标题写一个方法:
try-catch
并调用它而不用正确的public void connectTo(String ip) throws java.net.HostNotFoundException
块包围调用,编译器就不会拥有它。我并不是说我(或任何人)想要用try-catch
块来围绕每个Integer.parseInt
调用(和其他人),但我确定很好奇为什么编译器允许它。 / p>
答案 0 :(得分:2)
因为NumberFormatException
子类IllegalArgumentException
,后者又是RuntimeException
的子类。
RuntimeException
的子类与Exception
的子类不同,不需要明确捕获(尽管它们可以)。
来自RuntimeException
javadoc页面:
RuntimeException及其子类是未经检查的异常。如果方法或构造函数的throws子句可以通过执行方法或构造函数抛出并在方法或构造函数边界外传播,则不需要在方法或构造函数的throws子句中声明未经检查的异常。
答案 1 :(得分:1)
因为这些例外是unchecked
来自附件链接:
因为Java编程语言不需要方法 catch或指定未经检查的异常(RuntimeException,Error和 他们的子类),程序员可能会想要编写代码 仅抛出未经检查的异常或使其全部异常 子类继承自RuntimeException。这两个捷径 允许程序员编写代码而不必担心编译器错误 而无需指定或捕获任何异常。虽然 这似乎对程序员来说很方便,它避开了意图 捕获或指定要求并可能导致其他人的问题 使用你的课程。