Raj*_*ani 4 java arrays initialization
java不允许初始化负大小的数组.例如:
int[] arr = new int[-1];
Run Code Online (Sandbox Code Playgroud)
如果这已经知道了,为什么抛出NegativeArraySizeException而不是编译错误?只是好奇地知道为什么java决定它在运行时被抛出,而在编译时知道它会失败.
只有在将大小指定为常量表达式的情况下,才能在编译时执行此检查.但是,Java语言规范要求在运行时执行此检查:
15.10.2阵列创建表达式的运行时评估
在运行时,对数组创建表达式的评估表现如下:
[...]
- 首先,从左到右评估维度表达式.如果任何表达式评估突然完成,则不评估其右侧的表达式.
- 接下来,检查维度表达式的值.如果任何DimExpr表达式的值小于零,则
NegativeArraySizeException抛出a.
在决定是否应在编译时执行某项检查时,编译器设计团队会考虑新功能的成本和收益.由于编译时检查不会取代运行时检查,但除了它之外还会执行,因此额外的好处是微不足道的.但是,这并不意味着该功能不应该在编译器的未来版本中实现,只是语言设计者没有将其优先级设置得足够高以便现在实现.