2009-06-24 11 views

Antwort

41

Die Java Language Specification besagt, dass Bezeichner in der Länge unbegrenzt sind.

In der Praxis wird das Dateisystem jedoch die Länge des resultierenden Dateinamens begrenzen.

+4

Die Java-VM-Spezifikation besagt, dass jeder konstante String auf 65535 Bytes beschränkt ist: http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#88659 –

+1

Dies ist von der zweite Ausgabe (wie Jon's Antwort). In der dritten Ausgabe gibt es keinen solchen Hinweis. –

+0

Es ist da in der Java SE8 Edition. – EJP

0

Nein. Java legt keine Begrenzung für den Klassennamen fest. Wenn Sie jedoch mit anderen Systemen (z. B. JNI) kommunizieren, ist es besser, auf der sicheren Seite zu sein.

+0

Das heißt ** undefined Verhalten **, und schlechte Teil aller Spezifikationen)) – gavenkoa

27

65535 Zeichen glaube ich. Von der virtuellen Java-Maschine Spezifikation:

Die Länge des Feldes und Methodennamen, Feld und Methodendeskriptoren und andere konstante Stringwerte ist begrenzt auf 65535 Zeichen durch die 16-Bit unsigned Länge Artikel der Struktur CONSTANT_Utf8_info (§4.4.7). Beachten Sie, dass das Limit für die Anzahl Bytes in der Codierung und nicht auf die Anzahl der codierten Zeichen ist. UTF-8 codiert einige Zeichen unter Verwendung von zwei oder drei Bytes. Daher sind Zeichenfolgen , die Multibyte-Zeichen enthalten, weiter eingeschränkt.

hier:

http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html#88659

+0

Haben Sie eine solche Referenz für die dritte Ausgabe? Ich kann keinen finden. –

+10

65535 ist eine Einschränkung der JVM nicht die Sprache selbst – jitter

+0

Wahr ist, es ist eine bestimmte Grenze der JVM ... – Jon

3

mit JDK 1.5, die praktische Grenze für Klassennamen auf Windows XP mit 255 - längere Namen gab Fehler im Dateisystem. Dies war der vollständige Name (Verzeichnis + Paket + Klasse).

Ich habe nicht versucht, JDK 1.6 auf Vista oder Windows 7, hoffentlich Sun behoben, um das NTFS-Limit von 8000 oder so zu sein.

+0

Wer kennt die Antwort auf JDK 1,6+? – ycomp

Verwandte Themen