当前位置: 首页 > 面试题库 >

Java数组参数声明语法“…”如何工作?

尹昂雄
2023-03-14
问题内容

我写Java已有一段时间了,今天我遇到了以下声明:

public static void main(String... args) {

}

请注意数组声明中的“点点点”,而不是通常的括号[]。显然可以。实际上,我写了一个小测试并验证了它的有效性。因此,我提取了Java语法,以查看参数声明语法的位置,但未找到任何内容。

那么对那里的专家来说,这是如何工作的呢?它是语法的一部分吗?另外,虽然我可以像这样声明函数,但不能像这样在函数体内声明数组。

无论如何,您知道在哪里记录了此文件。这是好奇心,也许没有任何时间花在它上面,但是我很沮丧。


问题答案:

查看Java语言规范,第三版,第8章(类)。埋在其中的是这个金块:

如果最后一个形式参数是类型T的可变Arity参数,则考虑定义类型T
[]的形式参数。该方法则是可变Arity方法。否则,这是固定的固定方法。可变arity方法的调用可能包含比形式参数更多的实际参数表达式。将评估所有与变量arity参数之前的形式参数不符的实际参数表达式,并将结果存储到一个数组中,该数组将传递给方法调用(第15.12.4.2节)。

基本上,任何方法调用的最后一个参数都可以具有T...。如果有,它将转换为T[]

因此,基本上,您拥有的是复制更传统的理想方法

String[] args


 类似资料:
  • 问题内容: 看完之后,我才知道,是物体。数组的名称不是实际的数组,而只是引用。new运算符在堆上创建数组,并返回对新创建的数组对象的引用,然后将其分配给数组变量(名称)。类似于以下内容: 但是我也使用了这两种类型的数组声明。 和 以上两项均合法且可以正常工作。那么这两者之间有什么区别,我应该何时使用它们? 问题答案: 这将生成一个大小为5的数组,其中包含5个null元素: 如果这些值在编译时不是您

  • 我有以下代码: 但当我试着去看测试的内容时,我看到了这个 如果我试图看到什么是在任何项目的数组我得到一个错误: 有人能解释一下我做错了什么,正确的方法是什么吗? Visual Studio 2022, Blazor Webassup,.NET6.0 谢谢

  • 问题内容: 我刚刚开始学习语言,但仍在尝试消化一些东西。 我写了一个函数为: 我真的很困惑或由于缺乏知识而无法理解的用例 。 问题答案: 我在“ 您可以在Go中一次声明多个变量吗? ”中提到过:解释了。 但是您需要具有与函数的每个参数相关联的类型,而上一个参数列表中并非如此。 顺序始终是,而不是遵循变量声明规范: 你会总能找到一个类型 后 一个:或

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

  • Java中的一个方法可以拥有的最大参数数是多少?为什么? 我正在64位Windows系统上使用Java1.8。 准确地说,255用于静态,254用于非静态(在本例中将是第255个)方法。 我认为这可以在某种规范中描述,并且只需要静态定义允许的最大参数数。 但这只对和所有4字节类型有效。我用参数做了一些测试,在那种情况下我只能声明127个参数。 限制与方法的堆栈大小有关系吗? 注意:我真的不打算在任

  • 问题内容: 我可以写: 我也可以写: 但我不能写: 为什么这会被Java阻止? 我知道如何解决它,但有时会更简单。 例如: 自从我学会了如何在Java中玩数组以来,这个简单的问题一直困扰着我。 问题答案: 为什么这会被Java阻止? 你必须询问Java设计人员。该限制可能有一些微妙的语法原因。请注意,某些数组创建/初始化结构不在Java 1.0中,而(IIRC)是在Java 1.1中添加的。 但是