【发布时间】:2014-04-28 13:23:09
【问题描述】:
Java 包名的名称长度有限制吗?
喜欢包com.abc.xxx.xxxx.xxxx
【问题讨论】:
标签: java
Java 包名的名称长度有限制吗?
喜欢包com.abc.xxx.xxxx.xxxx
【问题讨论】:
标签: java
在类文件中,由于完整的类名存储为(修改后的)UFT-8 序列,因此存在实际限制,该序列的最大长度为 65535 字节,因为长度存储为无符号短.
存储 Generic 类的签名可能需要更短的包名。如果您尝试多次创建一个将类型作为参数的方法,它将更加受限,因为签名将包含每个参数的限定类型名称和单个序列中的返回类型,但仍然限制为 65535总共 UTF-8 字节。
【讨论】:
根据 Java 语言规范 (3.8):
“标识符是 Java 字母和 Java 数字的无限长度序列,其中第一个必须是 Java 字母。”
但是,正如@Holger 所指出的,JVM 规范对可以在类文件常量池中表示的字符串值设置了 2^16 - 1 的上限。 (参见 JVM 规范 4.4.7)
包名是完全限定类名的一部分,后者表示为类文件常量池条目。因此,实际的上限是完全限定类名的长度,而不仅仅是包名。
假设,如果有人要创建一个不使用标准类文件格式的 Java 实现,还有另一个限制……Java String 的长度,即 2^31 - 1 个字符。 (注意,String 的最大长度没有在 JLS 中指定。是 Java 类库和 javadocs 指定了这一点。)
然而,现实情况是这些实施限制是如此之大,以至于它们不应该带来实际问题。
【讨论】: