Javac不抱怨未捕获的异常(运行时异常)

时间:2011-07-03 14:24:07

标签: java exception static

我在课堂上有这个:

/* 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。

有人可以告诉我为什么会这样吗?

3 个答案:

答案 0 :(得分:4)

NumberFormatExceptionRuntimeException的子类。编译器不要求声明或捕获这样的异常 - 部分原因是许多代码可能会抛出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的任何子类,这些子类可能在方法执行期间被抛出但未被捕获。