在Spring课程中出现了这个问题,它有一些相当长的类名。语言中是否存在类名长度的限制?
根据Java语言规范,标识符长度是没有限制的。
但实际上,文件系统会限制文件名的长度。
我相信是 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
在Windows XP上,使用JDK 1.5时,类名的实际限制为255个字符。如果超过这个限制,文件系统会出错。这里指的是完整的名称(目录+包名+类名)。
我没有在Vista或Windows 7上尝试过JDK 1.6,希望Sun公司已经修复了这个问题,并将其调整为NTFS的限制,即约8000个字符。
Java没有对类名设置任何限制。但是,如果你要与其他系统(例如JNI)进行接口交互,最好还是保险起见。