Java中包名中的字符数是否有限制?

时间:2014-01-13 13:10:48

标签: java package

我很想知道Java中包名中的最大字符数或最大点数(。)是否有限制?我提到这个oracle doc,但在那里找不到答案。我还提到this thread,这让我怀疑名称限制是否依赖OS(XP,Windows 7)?

先谢谢!!

2 个答案:

答案 0 :(得分:4)

不,没有任何明智的意义。 Java不会对包名称施加特定限制。然而,底层系统是另一回事。 Windows上的软件包表示为文件夹,Windows将路径大小限制为260个字符:http://msdn.microsoft.com/en-us/library/aa365247.aspx

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

因此Java不限制名称,而是强制JDK实现强加系统限制。

答案 1 :(得分:3)

这种类文件格式在这种情况下有限制。包名称是internal binary name of a class的一个组件。该类的内部二进制名称为stored as a constant in the constant pool

关于CONSTANT_Class_info:

  

name_index项的值必须是有效的索引   constant_pool表。该索引处的constant_pool条目必须是a   表示有效二进制文件的 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个字符的包名称。

您可能需要write your own classloader才能加载该类,因为它超出了我所知道的任何文件系统或操作系统的限制。