运行时异常都是 RuntimeException 类及其子类异常,如 NullPointerException、IndexOutOfBoundsException 等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生。
非运行时异常是指 RuntimeException 以外的异常,类型上都属于 Exception 类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如 IOException、ClassNotFoundException 等以及用户自定义的 Exception 异常(一般情况下不自定义检查异常)。
表 1 和表 2 分别列出了 java.lang 中定义的运行时异常和非运行时异常的类型及作用。
表 1 Java中常见运行时异常
| 异常类型 | 说明 |
| ArithmeticException |
算术错误异常,如以零做除数 |
| ArraylndexOutOfBoundException |
数组索引越界 |
| ArrayStoreException |
向类型不兼容的数组元素赋值 |
| ClassCastException |
类型转换异常 |
| IllegalArgumentException |
使用非法实参调用方法 |
| lIIegalStateException |
环境或应用程序处于不正确的状态 |
| lIIegalThreadStateException |
被请求的操作与当前线程状态不兼容 |
| IndexOutOfBoundsException |
某种类型的索引越界 |
| NullPointerException |
尝试访问 null 对象成员,空指针异常 |
| NegativeArraySizeException |
再负数范围内创建的数组 |
| NumberFormatException |
数字转化格式异常,比如字符串到 float 型数字的转换无效 |
| TypeNotPresentException |
类型未找到 |
表 2 Java常见非运行时异常
| 异常类型 | 说明 |
| ClassNotFoundException |
没有找到类 |
| IllegalAccessException |
访问类被拒绝 |
| InstantiationException |
试图创建抽象类或接口的对象 |
| InterruptedException |
线程被另一个线程中断 |
| NoSuchFieldException |
请求的域不存在 |
| NoSuchMethodException |
请求的方法不存在 |
| ReflectiveOperationException |
与反射有关的异常的超类
|