在Java中,包名称中的字符数有限制吗



我很想知道Java中包名的最大字符数或最大点数(.)是否有限制?我介绍了这位神谕医生,但在那里找不到答案。我还提到了这个帖子,这让我再次怀疑名称限制是否与操作系统(XP、Windows7)有关?

提前感谢!!

没有,没有任何合理的含义。Java对程序包名称没有任何限制。然而,基础系统是另一回事。Windows上的程序包表示为文件夹,Windows将路径大小限制为260个字符:http://msdn.microsoft.com/en-us/library/aa365247.aspx

从理论上讲,即使我们有一个允许名称任意长度的系统,一个人的名称也不可能超过计算机的最大内存。

因此,Java并没有限制名称,而是强制JDK实现施加系统限制。

在这种情况下,类文件格式有限制。包名称是类的内部二进制名称的组成部分。类的内部二进制名称作为常量存储在常量池中。

关于CONSTANT_Class_info:

name_index项的值必须是constant_pool表。该索引处的constant_pool条目必须是CONSTANT_Utf8_info(§4.4.7)结构表示有效二进制以内部形式编码的类或接口名称(§4.2.1)。

关于存储在常量池中的单个值,

字段和方法名称、字段和方法描述符的长度,和其他常量字符串值(包括ConstantValue(§4.7.2)属性)被限制为65535个字符CONSTANT_Utf8_info结构的16位无符号长度项(§4.4.7).

请注意,限制是编码中的字节数,而不是取决于编码字符的数量。UTF-8对某些字符进行编码使用两个或三个字节。因此,包含多字节的字符串字符被进一步约束。

如果CONSTANT_Utf8_info不能超过65535个字节,并且它必须包含包名,后跟斜杠和类名,如果类名为一个字符,则包名的长度可能为65533个字符。

您可能需要编写自己的类加载器来加载类,因为它超出了我所知的任何文件系统或操作系统的限制。

最新更新