Java中变量或方法的最大名称长度是多少?

45

Java中的类/方法/变量名是否有最大长度限制?JLS似乎没有提到。我知道非常长的名称从代码可读性和可维护性的角度来看都是有问题的,但是只是出于好奇,是否存在限制(我猜测类名可能受文件系统最大文件名限制的限制)。

在Java中,类、方法和变量名的长度没有明确的最大限制,这取决于编译器和操作系统的限制。通常,编译器会允许相当长的名称,但是为了保持代码的可读性和可维护性,建议使用简洁而描述性强的名称。对于类名,确实可能受到操作系统最大文件名长度的限制,因此请注意此限制。
3个回答

37

如果我没记错的话,限制不在语言本身,而是在类文件格式中,该格式将名称限制为64k,因此对于所有实际意图来说,标识符长度并不是问题。具体来说,这是池中常量字符串的定义,似乎暗示最大长度为16位:

CONSTANT_Utf8_info {
    u1 tag;
    u2 length;
    u1 bytes[length];
}

对于文件系统而言,类名可能更具问题,我同意这点,我不确定目前支持哪些。


不行,因为问题是关于Java语言本身,而不是针对该语言的某个编译器实现,即使该编译器恰好是参考实现。 - Sebastian Graf

27

2
这是针对语言的,但类文件格式更为严格。 - Uri
1
这实际上相当令人惊讶,考虑到该语言是为类文件编译而设计的... - Uri
1
真的吗,我想知道如果你试图创建一个非常长的变量名会发生什么。 - talg
4
Main.java:1: 字符串 "aaaaaaaaaaaaaaaaaaaa..." 的 UTF8 表示对于常量池来说太长了。 - user471011

11
如果您超过虚拟机为方法名称设定的大小限制,那么您将会得到一个编译器错误(至少在我使用的javac版本中是这样的):

Main.java:1: UTF8代表字符串"aaaaaaaaaaaaaaaaaaaa..."对于常量池来说太长了


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接