Frage an java, initialization, static – Der Code für den statischen Initialisierer überschreitet den Grenzfehler von 65535 Byte in Java?

4

Hallo, ich versuche, 4 String-Arrays der Länge 10.100.1000.10000 zu initialisieren und diese Arrays sind wie

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

Aber ich bekomme den Fehler vonDer Code für den statischen Initialisierer überschreitet das Limit von 65535 Byte

Wie kann ich meine Arrays initialisieren?

Beachten Sie auch, dass das Laden aus einer Datei für mich keine Option ist :(

@ Krock Ich möchte ein Mapping in Teradata Java Udfs machen, für das ich meine Arrays hartcodeid initialisieren muss waqas
Es könnte besser gelöst werden, indem Sie eine Methode schreiben, die ein int-Argument verwendet und den Zeichenfolgenwert zurückgibt, der sich an diesem Arrayindex befunden hätte. krock
Vielleicht solltest du das Problem posten, das du zu lösen versuchst. Es wird einen besseren Weg geben. krock
Ich kann nur sehen, wie einer der Java-Leute sagt: "65 KB sollten für jeden reichen" ... man könnte meinen, die Leute lernen aus Fehlern der Vergangenheit ... Yay für Workarounds ... Wie lahm ... Markus A.
In den Tiefen der Welt gibt es ältere und schmutzigere Dinge als Orks. mcfinnigan

Deine Antwort

3   die antwort
7

Benutzenfor Schleifen. Zum Beispiel:

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

indem jeder Wert aus dem Konstantenpool geladen und dem entsprechenden Array-Index zugewiesen wird. Dies benötigt mehrere Byte Code pro Array-Element. Die Größe einer jvm-Methode ist auf 65535 Byte begrenzt, da ihre Länge mit einer 16-Bit-Zahl in der Klassendatei gespeichert wird.

In dem Fall, dass die Werte nicht einfach in einer Schleife berechnet werden können, können Sie die Initialisierung in separate statische Funktionen aufteilen:

<code>static {
    array1 = getValuesForArray1();
    ...
}

private static String[] getValuesForArray1() {
    ...
}
</code>

Wenn es ein Muster für die Initialisierungswerte gibt, ist es natürlich besser, die Werte sofort zu berechnen.

danke Jörn für deine hilfe..es scheint die lösung für mein problem zu sein waqas
2

Es könnte besser gelöst werden, indem Sie eine Methode schreiben, die ein int-Argument verwendet und den Zeichenfolgenwert zurückgibt, der sich an diesem Arrayindex befunden hätte. Hier wird String.format verwendet und die Länge des linken Abstands angegeben:

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

Verwandte Fragen