Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。
Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。
Error 是指在正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常的、不可恢复状态。
Exception
程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。
可检查(checked)
是编译期检查的一部分,必须在代码里显式进行捕获处理。
IOException
异常 | 描述 |
---|---|
ClassNotFoundException | 找不到相应的类 |
InterruptedException | 线程被另一个线程中断 |
NoSuchFieldException | 变量不存在 |
NoSuchMethodException | 方法不存在 |
不检查(unchecked)
就是运行时异常,并不会在编译器强制要求。需要根据自己的判断捕获并处理。
常见:
异常 | 描述 |
---|---|
NullPointerException | 空指针 |
ArrayIndexOutOfBoundsException | 访问数组越界 |
ClassCastExcception | 类型转换不兼容 |
ArithmeticException | 运算异常 |
ArrayStoreException | 数组存储对象类型错误 |
IllegalArgumentException | 方法接收了不合法的参数 |
NumberFormatException | 不能转换成数值类型的字符串 |
Error
Error 及其子类都属于 unchecked exceptions
Error 是指在正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常的、不可恢复状态。
VirtualMachineError
java 虚拟机内部异常
OutOfMemoryError
StackOverflowError:线程的堆栈大小超过了内存分配限制
InternalError
UnknownError
LinkageError
加载异常
NoClassDefFoundError :Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误
ClassNotFoundException与NoClassDefFoundError区别
ClassNotFoundException 是在编译时就找不到类
NoClassDefFoundError 是运行时找不到,这个类存在,但对类加载器不可见