negativearraysizeexception是java中因用负数创建数组而抛出的未检查运行时异常;它在new表达式传入负长度时由jvm抛出,常见于计算错误、输入未校验等场景,需在数组创建前校验长度≥0。

NegativeArraySizeException 是 Java 中一个运行时异常,当尝试用负数作为长度创建数组时抛出。它继承自 RuntimeException,属于未检查异常(unchecked exception),编译器不会强制要求捕获或声明,但一旦发生,程序会立即中断执行。
为什么会触发 NegativeArraySizeException?
Java 规定数组长度必须是非负整数(≥ 0)。只要在 new 表达式中传入负值,JVM 就会在初始化阶段拒绝分配内存并抛出该异常。
- 常见场景:变量计算结果为负、用户输入未校验、循环边界错误、反向计算索引时误作长度
-
典型代码:
int[] arr = new int[-5];或int len = someCalculation(); int[] a = new int[len];(当len为负)
如何快速定位问题代码?
异常堆栈信息中会明确指出哪一行调用了 new 并传入了负数。重点关注:
- 数组创建语句附近的变量来源(是否来自方法返回值、用户输入、数学运算)
- 是否有隐式类型转换(如
byte或short负值提升为int后仍为负) - 是否在泛型集合转数组时传入了错误的长度(如
list.toArray(new String[-1]))
怎么避免和修复?
核心原则是:**在创建数组前验证长度值的合法性**。
- 显式判断:
if (length - 使用默认兜底:
int safeLen = Math.max(0, calculatedLength); int[] arr = new int[safeLen]; - 对用户输入/外部数据做预处理,例如解析字符串数字后检查符号
- 在工具方法中封装安全创建逻辑,比如
ArrayUtils.safeNewStringArray(int len)
注意:它不是由数组访问越界引起
不要和 ArrayIndexOutOfBoundsException 混淆。前者发生在“定义数组时”,后者发生在“使用数组时”(如 arr[-1] 或 arr[10] 超出长度)。两者触发时机和原因完全不同。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











