Java对类名长度有限制吗?
Posted
技术标签:
【中文标题】Java对类名长度有限制吗?【英文标题】:Does Java have a limit on the class name length? 【发布时间】:2010-11-05 13:24:16 【问题描述】:这个问题出现在 Spring 类中,它有一些相当长的类名。类名长度的语言有限制吗?
【问题讨论】:
【参考方案1】:Java Language Specification 声明标识符的长度不受限制。
但实际上,文件系统会限制生成的文件名的长度。
【讨论】:
Java VM 规范规定任何常量字符串都限制为 65535 字节:java.sun.com/docs/books/jvms/second_edition/html/… 这是来自第二版(与乔恩的回答相同)。第三版中没有这样的参考。 当前链接已损坏【参考方案2】:我相信有 65535 个字符。来自Java虚拟机规范:
字段和方法名的长度, 字段和方法描述符,以及 其他常量字符串值是 限制为 65535 个字符 的 16 位无符号长度项 CONSTANT_Utf8_info 结构(第 4.4.7 节)。 请注意,限制在数量上 编码中的字节数,而不是 编码字符的数量。 UTF-8 使用编码一些字符 两个或三个字节。因此,字符串 合并多字节字符是 进一步限制。
这里:
https://docs.oracle.com/javase/specs/jvms/se6/html/ClassFile.doc.html#88659
【讨论】:
第三版有这样的参考吗?我找不到。 65535 是 JVM 而不是语言本身的限制 我在 JLS 第三版中找不到正确的部分。谁能提供更多信息? 这是 VM 规范第 4.10 章的最后一点:java.sun.com/docs/books/jvms/second_edition/html/… 对于 Java 8:docs.oracle.com/javase/specs/jvms/se7/html/…【参考方案3】:在 JDK 1.5 中,Windows XP 上类名的实际限制为 255——更长的名称会导致文件系统出错。这是全名(目录+包+类)。
我还没有在 Vista 或 windows 7 上尝试过 JDK 1.6,希望 Sun 将其修复为 NTFS 限制为 8000 左右。
【讨论】:
有人知道 JDK 1,6+ 的答案吗?【参考方案4】:没有。 Java 对类名没有任何限制。但是,如果您与其他系统(例如 JNI)进行交互,最好还是安全一点。
【讨论】:
这被称为未定义的行为,是任何规范的坏部分))以上是关于Java对类名长度有限制吗?的主要内容,如果未能解决你的问题,请参考以下文章