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中变量或方法的最大名称长度的主要内容,如果未能解决你的问题,请参考以下文章