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

  • 个人博客原文链接
  • 更多文章欢迎访问个人博客站点

 

在写数字字符串转数字的过程(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是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:非法参数,在把字符串转换成数字的时候经常出现的一个异常,我们可以在自己的程序中好好利用这个异常

你可能感兴趣的:(Java)