2011-05-26 70 views
2

正如我所知如果方法抛出异常Java编译器强制该方法的调用方捕获该异常。检查异常的调用方法

我看到parseInt抛出NumberFormatException

public static int parseInt(String s) throws NumberFormatException { 
    return parseInt(s,10); 

那么,为什么我可以把它叫做wthout捕捉异常:

String str = "5"; 
int n = Integer.parseInt(str); 
+0

正如伯特所说,他们不是“检查异常”,所以尝试/捕捉是可选的。 “抛出”声明仅作为“提示”给出。抓住它,如果你喜欢 – laher 2011-05-26 05:03:25

+0

有一个最近的问题在这里有很多关于检查和未检查异常之间的区别答案很好的信息:http://stackoverflow.com/questions/6115896/java-checked-vs-unchecked-异常的解释 – Aleadam 2011-05-26 05:11:56

回答

8

因为NumberFormatException延伸RuntimeException - 运行时异常被认为是 '未选中' ,请参阅RuntimeExceptionJavadoc

RuntimeException是 的超类,这些异常在 Java虚拟机的正常操作期间可抛出 。

的方法不需要申报 其throws子句中 RuntimeException的可能方法的执行过程中被抛出 但 没有抓到的任何子类。

这里是an article from the Java tutorial解释这个功能是如何意味,为什么它存在

0

的重要区别在于,从运行时异常延伸的任何异常不需要被抓,而其他任何例外情况。可以随时抛出延长RuntimeException的异常,例如NullPointerException或ConcurrentModificationException,因此他们不能指望您尝试捕获它们。