Java 增加静态数组,而不通过反射重新创建它

Java 增加静态数组,而不通过反射重新创建它,java,reflect,field-accessors,Java,Reflect,Field Accessors,我知道静态数组有一个固定大小的字段。我可以在反射中编辑它以增加它的值。但是,我不认为这是我必须编辑的唯一内容,以便通过反射创建更多的静态数组索引。我似乎无法在线找到[L的静态数组类的源代码 当前进展 Object[] foo = new Object[0]; Field field = ReflectionHandler.getField(foo.getClass(), foo, "size") 导致字段未找到异常 我曾试图攻击java,就像攻击Enum一样。虽然我不知道所有东西都存储在哪里。

我知道静态数组有一个固定大小的字段。我可以在反射中编辑它以增加它的值。但是,我不认为这是我必须编辑的唯一内容,以便通过反射创建更多的静态数组索引。我似乎无法在线找到
[L
的静态数组类的源代码

当前进展

Object[] foo = new Object[0];
Field field = ReflectionHandler.getField(foo.getClass(), foo, "size")
导致字段未找到异常

我曾试图攻击java,就像攻击Enum一样。虽然我不知道所有东西都存储在哪里。但我可以访问反射工厂

我的黑客枚举和反射助手版本
在不重新分配Java数组的情况下(安全地)更改其大小是不可能的

数组的
length
“field”根本不是一个字段。从语法上讲,它是一个特例。在实现级别,它是数组对象头中的一个32位字。您不能使用反射来更改该字中的值。如果您找到其他方法来更改它,您将带来麻烦(JVM崩溃)因为:

  • 长度是阻止您在数组末尾之外写入的长度
  • 数组末尾以外的内存最有可能用于表示其他对象,以及
  • 各种低级事物(如JIT编译器和垃圾收集器)假定(正确!)数组对象的长度不能更改,并可能将其缓存在本机代码变量或寄存器中
[尝试使用反射]……导致字段未找到异常

这是因为
length
不是字段;请参见上文

我似乎无法在线找到
[L
的静态数组类的源代码

(这是
long[]
的类型名)您找不到它。它不存在。没有任何Java数组类型的Java源代码