4

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

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

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

如何初始化我的数组?

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

4

3 回答 3

7

使用for循环。例如:

for (int i = 0; i <= 9; i++)
    array1[i] = String.valueOf(i);
于 2012-04-18T10:21:42.033 回答
7

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

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

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

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

如果初始化值有模式,那么动态计算值当然更好。

于 2012-04-18T10:40:53.817 回答
2

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

private static String getValue(int index, int stringLength) {
    return String.format("%0" + stringLength + "d", index);
}
于 2012-04-18T10:47:24.577 回答