Java中变量或方法的最大名称长度

Posted

技术标签:

【中文标题】Java中变量或方法的最大名称长度【英文标题】:Max name length of variable or method in Java 【发布时间】:2010-10-16 07:22:38 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

类名可能是文件系统的更多问题,我同意,我不确定当前支持什么。

【讨论】:

不,因为问题是关于 Java 语言,而不是该语言的编译器的某些实现,即使该编译器恰好是参考实现。【参考方案2】:

JLS: An identifier is an unlimited-length sequence of Java letters and Java digits, the first of which must be a Java letter.

还发现了类似的问题(虽然它没有出现在我最初的搜索中,或者当我输入奇怪的问题标题时):Maximum Method Name Length

【讨论】:

那是针对语言的,但是类文件格式更严格。 考虑到该语言是为类文件编译的,这实际上是相当令人惊讶的...... 是的,我想知道如果你真的尝试创建一个可笑的长变量名会发生什么 Main.java:1: 字符串“aaaaaaaaaaaaaaaaaaaa...”的 UTF8 表示对于常量池来说太长了【参考方案3】:

如果你超过了 VM 对方法名称施加的大小限制,那么你会得到一个编译器错误(至少对于我正在使用的 javac 版本):

Main.java:1:字符串“aaaaaaaaaaaaaaaaaaaa...”的 UTF8 表示 对于常量池来说太长了

【讨论】:

以上是关于Java中变量或方法的最大名称长度的主要内容,如果未能解决你的问题,请参考以下文章

my batis单个变量长度最大多少

JavaScript 中变量名的最大长度

最大方法名称长度

在 Common Lisp 中,符号名称是不是有定义的最大长度?

标头的最大长度

iPad 应用程序名称的最大长度是多少?