Java中运行时异常是Exception的子类,属非受检异常,编译器不强制捕获或声明;由程序逻辑错误引起,应通过编码规避而非try-catch兜底,常见类型包括NullPointerException、ArrayIndexOutOfBoundsException等。
Java中的运行时异常(RuntimeException)是Exception的子类,属于非受检异常(unchecked exception),编译器不强制要求捕获或声明。它们通常由程序逻辑错误引起,应在编码阶段主动规避,而非依赖try-catch兜底。
以下是最常 encountered 的几种运行时异常,每种都附带触发条件和简明示例:
String s = null; s.length();
如:int[] a = {1}; a[5];
"abc".charAt(5);
Object o = new Date(); String s = (String) o;
int x = 10 / 0;
Integer.parseInt("abc"); 抛出 NumberFormatException(它是该异常的子类)next()前未调用hasNext(),或在Stream已消费后再次遍历。运行时异常的设计哲学是:它们反映的是程序缺陷,而非外部不确定性。比如空指针、越界、类型强转失败——这些问题本该在开发、测试阶段被发现并修复,而不是靠异常处理掩盖逻辑漏洞。
if (obj != null)、if (index >= 0 && index )
重点不在“捕获”,而在“预防”和“诊断”:
Objects.requireNonNull()或Optional封装instanceof判断(注意泛型擦除限制)@NotNull + Lombok或Spring ValidationprintStackTrace()或日志中的栈顶行——它指向真正出错的代码行,而非异常传播路径业务中常定义继承RuntimeException的异常类,例如OrderNotFoundException、InsufficientBalanceException。这类异常无需throws声明,可在任意层级直接throw,由全局异常处理器(如Spring的@ControllerAdvice)统一响应,保持业务代码简洁。