views:

825

answers:

4

This question came up in Spring class, which has some rather long class names. Is there a limit in the language for class name lengths?

+17  A: 

The Java Language Specification states that identifiers are unlimited in length.

In practice though, the filesystem will limit the length of the resulting file name.

Robert Munteanu
The Java VM Specification states that any constant string is restricted to 65535 bytes: http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#88659
Carlos Heuberger
This is from the second edition ( same as Jon's answer ) . There is no such reference in the third edition.
Robert Munteanu
+1  A: 

No. Java doesn't impose any limit on the class name. But if you interfacing with other systems (e.g. JNI) its better to be on the safe side.

lud0h
+7  A: 

65535 characters I believe. From the Java language specification:

The length of field and method names, field and method descriptors, and other constant string values is limited to 65535 characters by the 16-bit unsigned length item of the CONSTANT_Utf8_info structure (§4.4.7). Note that the limit is on the number of bytes in the encoding and not on the number of encoded characters. UTF-8 encodes some characters using two or three bytes. Thus, strings incorporating multibyte characters are further constrained.

here:

http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html

Jon
Do you have a such a reference for the third edition? I'm unable to find one.
Robert Munteanu
65535 is a limitation of the JVM not the language itself
jitter
True it is a specific limit of the JVM...
Jon
It is a limitation of the class file format.
starblue
I couldn't find the correct part in the third edition of the JLS. can anybody provide any further information?
Jon
Its the last point of the VM Specification chapter 4.10: http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#88659
Carlos Heuberger
A: 

With JDK 1.5, the practical limit for class names on Windows XP with 255 -- longer names gave errors in the file system. This was the full name (directory+package+class).

I have not tried JDK 1.6 on Vista or windows 7, hopefully Sun fixed it to be the NTFS limit of 8000 or so.

Stanleymit