Java对类名长度有限制吗?

38

在Spring课程中出现了这个问题,它有一些相当长的类名。语言中是否存在类名长度的限制?

4个回答

51

根据Java语言规范,标识符长度是没有限制的。

但实际上,文件系统会限制文件名的长度。


7
Java虚拟机规范规定,任何常量字符串的字节数不能超过65535字节:http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#88659 - user85421
1
这是第二版的内容(与Jon的回答相同)。 在第三版中没有这样的参考资料。 - Robert Munteanu
1
当前链接已损坏。 - Lambart

33

我相信是 65535 个字符。根据 Java 虚拟机规范:

字段和方法名的长度、字段和方法描述符以及其他常量字符串值的长度,都受到 CONSTANT_Utf8_info 结构(§4.4.7)的 16 位无符号长度项的限制,其长度限制为65535个字符。请注意,此限制是对编码字节的数量而非编码字符的数量的限制。UTF-8 使用两个或三个字节来编码某些字符。因此,包含多字节字符的字符串还会受到进一步的限制。

这里是链接:https://docs.oracle.com/javase/specs/jvms/se6/html/ClassFile.doc.html#88659


你有第三版的参考资料吗?我找不到。 - Robert Munteanu
11
65535是JVM的限制,而不是语言本身的限制。 - jitter
我在《Java 语言规范》第三版中找不到正确的部分。有人能提供更多信息吗? - Jonathan Holloway
这是VM规范第4.10章的最后一点:http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#88659 - user85421
对于Java 8:https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4.7 - Christopher Schultz

3

在Windows XP上,使用JDK 1.5时,类名的实际限制为255个字符。如果超过这个限制,文件系统会出错。这里指的是完整的名称(目录+包名+类名)。

我没有在Vista或Windows 7上尝试过JDK 1.6,希望Sun公司已经修复了这个问题,并将其调整为NTFS的限制,即约8000个字符。


有人知道JDK 1.6+的答案吗? - ycomp

0

Java没有对类名设置任何限制。但是,如果你要与其他系统(例如JNI)进行接口交互,最好还是保险起见。


这被称为“未定义行为”,是任何规范的不良部分)) - gavenkoa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接