运行时异常,虽然要到代码运行时才报出来,但是其实是可以在代码中多一些判断,来避免:
1、NullPointerException :在编程中,就要事先考虑空指针的情况。比如根据id查询用户名,有可能id查找用户时找不到,即用户对象为空指针,就要事先做好判断。
2、NumberFormatException:在字符串转数字过程中,如果字符串有非数字字符,会报该异常。所以在转换之前,可以事先做好判断。
3、ArrayIndexOutOfBoundsException:数组越界异常。在访问数组元素时,如果不确定是否越界,可以用索引与数组长度做判断。
4、ClassCastException:类型转换错误异常。在转换对象类型之前,可以先用instanceof判断对象是否是该类型的实例。
5、ArithmeticException:算术异常。在做除法前,先判断除数是否为0。
普通异常,即继承Exception,底层有抛出,没处理的话,上层必须要捕获(编译器强制)。
运行时异常,即继承RuntimeException,底层有抛出,没处理,上层可以不捕获(编译器中没强制要捕获)。这个时候会有问题,虽然不捕获异常,但是异常依然存在,这时候抛异常的代码之后的代码就得不到执行。
总结:
1.RuntimeException,也就是运行时异常,表示你的代码本身存在BUG,比如ArrayIndexOutOfBoundsException,数组下标越界,这个属于代码有问题。
控制台一旦报RuntimeException,就必须要处理。。没有例外的。而且,处理RuntimeException,不是try-catch能解决的。。try-catch在这里使用毫无意义。应该在逻辑上来规避运行时异常。
2.不是RuntimeException,就是编译时异常,异常只有这两种了。比如你在处理文件流时的I/O问题,就属于编译时异常。这个时候用thr{}catch 来捕获或者 throws即可。编译时异常,逻辑上规避不了,所以需要捕获的方式来解决。