Java中运行时异常继承自RuntimeException且编译通过,编译时异常继承自Exception但非RuntimeException子类且编译报错;前者反映逻辑缺陷,后者应对环境不确定性。
Java中区分运行时异常和编译时异常,核心就看两点:是否继承自
RuntimeException,以及编译器会不会在写代码时就报错。
这是最本质的判断依据:
NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException),它就是运行时异常;RuntimeException(比如 IOException、SQLException、ClassNotFoundException),它就是编译时异常。这是最直观的区分方式:
try-catch 或 throws 就无法通过编译;null 对象的方法、数组下标越界、除以零,这些错误只在 JVM 执行到那行时才暴露。这反映了 Java 异常机制的设计哲学:
避免混淆概念:
OutOfMemoryError、StackOverflowError 是 Throwable 的子类,但属于系统级严重错误,程序通常无法恢复,也不归入“异常处理”的讨论范畴。