Diese Frage kam in der Spring-Klasse, die einige lange Klassennamen hat. Gibt es eine Grenze in der Sprache für Klassennamen?Hat Java eine Begrenzung für die Länge des Klassennamens?
Antwort
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.
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.
Das heißt ** undefined Verhalten **, und schlechte Teil aller Spezifikationen)) – gavenkoa
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
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.
Wer kennt die Antwort auf JDK 1,6+? – ycomp
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 –
Dies ist von der zweite Ausgabe (wie Jon's Antwort). In der dritten Ausgabe gibt es keinen solchen Hinweis. –
Es ist da in der Java SE8 Edition. – EJP