通过之前的分析可以发现只要方法后面带有throws往往都是告诉用户本方法可能产生的异常是什么,所以这个时候来观察一段代码。
public class JavaDemo {
public static void main(String args[]) {
int num = Integer.parseInt("123");
System.out.println(num);
}
}
打开Integer类中parseInt()方法的定义来观察:public static int parseInt(String s ) throws NumberFormatException;
这个方法上明确的抛出了一个异常,但是在处理的时候并没有强制性要求处理,观察一下NumberFormatException类的继承结构,同时也观察数学异常类的继承结构;
ArithmeticException:
java.lang.Object
|-java.lang.Throwable
|-java.lang.Exception
|-java.lang.RuntimeException
|-java.lang.ArithmeticException
NumberFormatException:
java.lang.Object
|-java.lang.Throwable
|-java.lang.Exception
|-java.lang.RuntimeException
|-java.lang.IllegalArgumentException
|-java.lang.NumberFormatException
如果现在所有的程序执行上只要使用了throws定义的方法都必须要求开发者进行手工处理,那么这个代码的编写就太麻烦了,所以在设计的过程之中,考虑到代码编写的方便,所以提供有一个灵活的可选的异常处理父类“RuntimeException”,这个类的异常子类可以不需要强制性处理。
面试题:请解释RuntimeException与Exception的区别?列举出几个你常见的RuntimeException;
1.RuntimeException是Exception的子类;
2.RuntimeException标注的异常可以不需要进行强制性处理,而Exception异常必须强制性处理;
3.常见的RuntimeException异常:NumberFormatException、ClassCastException、NullPointerException。