当前位置: 首页 > 知识库问答 >
问题:

Java方法声明中的最大参数数

袁泰平
2023-03-14

Java中的一个方法可以拥有的最大参数数是多少?为什么?

我正在64位Windows系统上使用Java1.8。

准确地说,255用于静态,254用于非静态(this在本例中将是第255个)方法。

我认为这可以在某种规范中描述,并且只需要静态定义允许的最大参数数。

但这只对int和所有4字节类型有效。我用long参数做了一些测试,在那种情况下我只能声明127个参数。

限制与方法的堆栈大小有关系吗?

注意:我真的不打算在任何方法中使用这许多参数,但这个问题只是为了澄清确切的行为。

共有1个答案

周浩淼
2023-03-14

JVM规范中定义了这个限制:

方法参数的数量被方法描述符的定义限制为255个(§4.3.3),在实例或接口方法调用的情况下,限制包括一个单元。

第§4.3.3节提供了一些附加信息:

关于您的问题的最后一部分与64位系统有关,规范定义了一个参数贡献了多少单位,即使在64位平台上,规范的这一部分仍然必须遵守,64位JVM将容纳255个实例参数(如255strings),而不管内部对象的指针大小如何。

 类似资料:
  • 问题内容: Java中的方法可以拥有的最大参数数量是什么?为什么? 我在64位Windows系统上使用Java 1.8。 关于StackOverflow的所有答案都表明,技术限制为255个参数,但未指定原因。 确切地说,静态方法为255,非静态方法为254(在这种情况下为第255)。 我认为这可以用某种规范来描述,并且只允许静态定义最大数量的参数。 但这仅对 所有4字节类型有效。我使用参数进行了一

  • 问题内容: 在方法内部声明局部内部类时,为什么包含最终的静态String或int是合法的,而包含其他对象却不合法? 例如: 编译时,得到以下信息: 为什么要区分?是因为String是不可变的吗?如果是这样,Integer.valueOf()也无效吗? 问题答案: 这是因为前两个静态成员分配给原始类型或String类型的编译时常量。 根据Java语言规范的第8.1.3节: 8.1.3。内部类和封闭实

  • 带注释参数的Spring AOP切入点 如何基于带注释的参数编写方面切入点 AspectJ切入点表达式在任意位置匹配参数注释 考虑以下对setter方法的请求 我有以下内容,工作很好: 如何完成这个目标。有可能吗?我正在使用AspectJ 1.9.6

  • 问题内容: 我写Java已有一段时间了,今天我遇到了以下声明: 请注意数组声明中的“点点点”,而不是通常的括号[]。显然可以。实际上,我写了一个小测试并验证了它的有效性。因此,我提取了Java语法,以查看参数声明语法的位置,但未找到任何内容。 那么对那里的专家来说,这是如何工作的呢?它是语法的一部分吗?另外,虽然我可以像这样声明函数,但不能像这样在函数体内声明数组。 无论如何,您知道在哪里记录了此

  • 问题内容: 我知道Java中一个方法的最大大小为64k。如果超过该限制,我们将收到一个编译器警告,例如“代码太大而无法编译”。所以我们可以称这为Java的缺点吗? 我们可以增加这个大小限制,还是真的有可能增加? 关于此方法大小还有其他想法吗? 问题答案: 以我的经验,64KB的限制只是生成代码的问题。尤其是 初始化大型数组时(通过代码完成) 在结构良好的代码中,每种方法的长度都是可管理的,并且比此

  • 问题内容: 我正在学习Java泛型,我问自己这个问题。 这两个方法声明之间有什么区别? 和 问题答案: 在后者中,您可以引用范围内的类型,即。在前者中,您不需要。