欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

NumberFormatException异常为什么不需要捕获?

程序员文章站 2022-07-15 13:10:03
...

 

在写数字字符串转数字的过程(Integer a = Integer.parseInt("123");)发现此静态方法抛出了NumberFormatException异常,但实际代码中并没有要求try/catch处理或者继续向上抛出异常,很是诧异,因此查询了资料,现在记录如下。

 

异常源码信息

此方法的源码为:

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

说明需要抛出的异常类型是:NumberFormatException,其定义类的源码如下:

public class NumberFormatException extends IllegalArgumentException {}

 

IllegalArgumentException类定义如下:

public class IllegalArgumentException extends RuntimeException {}

 

类的继承关系

NumberFormatException异常为什么不需要捕获?
类的继承关系

可见NumberFormatException是RuntimeException的子类,根据查询的资料,RuntimeException异常以及抛出的其子类异常是不需要try/catch捕获的异常。也就是说RuntimeException不需要强制try/catch捕获,而非RuntimeException异常则需要进行捕获处理.

总结如下:

CheckedException:在程序中必须使用try...catch进行处理。
RuntimeException:可以不使用try...catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。

对于RuntimeException的子类最好也使用异常处理机制。虽然RuntimeException的异常可以不使用try…catch进行处理,但是如果一旦发生异常,则肯定会导致程序中断执行,所以,为了保证程序再出错后依然可以执行,在开发代码时最好使用try…catch的异常处理机制进行处理。

常见RuntimeException异常

  • 1、NullPointerException:见的最多了,其实很简单,一般都是在null对象上调用方法了。

  • NumberFormatException:继承IllegalArgumentException,字符串转换为数字时出现。比如int i= Integer.parseInt(“ab3”);

  • 3、ArrayIndexOutOfBoundsException:数组越界。比如 int[] a=new int[3]; int b=a[3];

  • 4、StringIndexOutOfBoundsException:字符串越界。比如 String s=”hello”; char c=s.chatAt(6);

  • 5、ClassCastException:类型转换错误。比如 Object obj=new Object(); String s=(String)obj;

  • 6、UnsupportedOperationException:该操作不被支持。如果我们希望不支持这个方法,可以抛出这个异常。既然不支持还要这个干吗?有可能子类中不想支持父类中有的方法,可以直接抛出这个异常。

  • 7、ArithmeticException:算术错误,典型的就是0作为除数的时候。

  • 8、IllegalArgumentException:非法参数,在把字符串转换成数字的时候经常出现的一个异常,我们可以在自己的程序中好好利用这个异常