静态初始化程序的代码超出了java中的65535字节限制错误?

时间:2012-04-18 10:20:06

标签: java static initialization

您好我正在尝试初始化长度为10,100,1000,10000的4个字符串数组,这些数组就像

array1={"0","1",..."9"} 
array2={"00","01",..."99"} 
array3={"000","001",..."999"} 
array4={"0000","0001",..."9999"} 

但我收到的错误静态初始化程序的代码超过了65535字节的限制

如何初始化我的数组?

另请注意,从文件中加载它不是我的选择:(

3 个答案:

答案 0 :(得分:7)

使用for循环。例如:

for (int i = 0; i <= 9; i++)
    array1[i] = String.valueOf(i);

答案 1 :(得分:7)

通过从常量池中加载每个值并将其分配给相应的数组索引,在java字节码中初始化常量数组。每个数组元素需要几个字节的代码。 jvm方法的大小限制为65535字节,因为它的长度使用16位数存储在类文件中。

如果在循环中无法轻松计算值,则可以将初始化分解为单独的静态函数:

static {
    array1 = getValuesForArray1();
    ...
}

private static String[] getValuesForArray1() {
    ...
}

如果初始化值存在模式,则其当然更好地计算动态值。

答案 2 :(得分:2)

通过编写一个接受int参数并返回该数组索引处的字符串值的方法,可以更好地解决这个问题。这里使用String.format并指定左填充长度:

private static String getValue(int index, int stringLength) {
    return String.format("%0" + stringLength + "d", index);
}