我在课堂上有这个:
/* parses a Value out of a String */
public static int parseValue(final String text) throws NumberFormatException {
String cleanedValue = text.replace("-", "").replace(",", ".");
return Math.round(Float.parseFloat(cleanedValue) * 100);
}
出于某种原因,javac并没有抱怨我没有在调用代码中捕获NumberFormatException。
有人可以告诉我为什么会这样吗?
答案 0 :(得分:4)
NumberFormatException
是RuntimeException
的子类。编译器不要求声明或捕获这样的异常 - 部分原因是许多代码可能会抛出NullPointerException
这样的东西,所以如果我们必须总是声明或捕获这样的东西,它将导致许多无关的代码
答案 1 :(得分:4)
NumberFormatException是未经检查的异常 - 这意味着它不必被捕获。在此处阅读更多内容,例如:http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html
答案 2 :(得分:4)
来自Java Docs,NumberFormatException
是,
抛出表示 应用程序试图转换 字符串到其中一个数字类型, 但是字符串没有 适当的格式。
查看继承结构,NumberFormatException派生自RuntimeException
,编译器不会强制捕获这些异常。不推荐。您需要捕获/声明仅检查的异常。
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.IllegalArgumentException
java.lang.NumberFormatException
现在,方法 不需要 在其throws子句中声明RuntimeException的任何子类,这些子类可能在方法执行期间被抛出但未被捕获。