我知道方法是否抛出异常Java编译器强制该方法的调用者捕获该异常。
我看到parseInt
抛出NumberFormatException
:
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
那么为什么我可以在没有捕获异常的情况下调用它:
String str = "5";
int n = Integer.parseInt(str);
答案 0 :(得分:8)
由于NumberFormatException
延伸RuntimeException
- 运行时异常被视为“未选中”,请参阅RuntimeException
的{{3}}:
RuntimeException是的超类 那些可以抛出的异常 在正常运作期间 Java虚拟机。
声明输入不需要方法 它的throws子句的任何子类 可能抛出的RuntimeException 在执行方法期间但是 没被抓住。
以下是Javadoc解释此功能的含义及其存在的原因
答案 1 :(得分:0)
重要的区别在于,不需要捕获从Runtime异常扩展的任何Exception,而任何其他Exception都可以。可以随时抛出扩展RuntimeException的异常,例如NullPointerException或ConcurrentModificationException,因此他们不能指望您尝试捕获所有异常。