关于java包名长度有限制吗?

时间:2014-03-21 09:03:22

标签: java

我想知道java包名是否有名称长度?像包com.abc.xxx.xxxx.xxxx

2 个答案:

答案 0 :(得分:9)

在类文件中存在实际限制,因为完全限定类名称存储为(修改的)UFT-8序列,其最大长度为65535字节,因为长度存储为unsigned short

存储Generic类的签名可能需要更短的包名称。如果您尝试创建一个多次将类型作为参数的方法,则会更加有限,因为签名将包含每个参数的限定类型名称和单个序列中的返回类型,但仍限制为65535 UTF-总共8个字节。

答案 1 :(得分:4)

根据JLS(3.8):

  

"标识符是无限长度的Java字母和Java数字序列,第一个必须是Java字母。"

但是,正如@Holger指出的那样,JVM规范对可以在类文件常量池中表示的字符串值设置了上限2 ^ 16 - 1。 (请参阅JVM规范4.4.7

包名称是完全限定类名的一部分,后者表示为类文件常量池条目。因此,实际上限是完全限定类名的长度,而不仅仅是包名。

假设有人要创建一个没有使用标准类文件格式的Java实现,还有另一个限制...... Java String的长度,即2 ^ 31 - 1字符。 (注意,在JLS中没有指定String的最大长度。它是Java类库和指定它的javadoc。)

然而,现实情况是,这些实施限制非常大,不应提出实际问题。