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源代码