Java 在数组创建中调用构造函数

Java 在数组创建中调用构造函数,java,arrays,Java,Arrays,我认为当数组被创建时,会有 构造函数调用(将元素指定为默认值) 如果我是对的..构造函数在哪里..不,没有这样的东西。基元数组元素初始化为默认基元值(0对于int)。对象数组元素初始化为null 创建数组后,可以使用java.util.array.fill(array,defaultElementValue)填充数组 引用 数组由数组创建表达式(§15.10)或数组初始值设定项(§10.6)创建 如果使用初始值设定项,则会指定值int[]ar=newint[]{1,2,3} 如果使用数组创建表达

我认为当数组被创建时,会有 构造函数调用(将元素指定为默认值)
如果我是对的..构造函数在哪里..

不,没有这样的东西。基元数组元素初始化为默认基元值(
0
对于
int
)。对象数组元素初始化为
null

创建数组后,可以使用
java.util.array.fill(array,defaultElementValue)
填充数组

引用

数组由数组创建表达式(§15.10)或数组初始值设定项(§10.6)创建

如果使用初始值设定项,则会指定值
int[]ar=newint[]{1,2,3}

如果使用数组创建表达式(如示例中所示),则():

每个类变量、实例变量或数组组件在创建时都会使用默认值进行初始化


不,没有这样的构造函数。java字节码中有一个专用的操作码
newarray
,用于创建数组

例如,这是此指令的反汇编代码
int[]a=new int[4]

int[] a=new int[4];

从概念上讲,您可以将数组创建视为数组构造函数,但是程序员无法自定义构造函数,因为数组类型没有源代码,因此不能有任何构造函数(或者方法)

有关阵列的概念视图,请参见my


实际上,创建数组是Java虚拟机的一个基本操作。

那么它们从哪里获得默认值..直接由jvm执行?@saravanan没有[this]()answer@Bozho:谢谢你的回答..我还有一个疑问..为什么我们不能在匿名数组创建中分配索引值int[]ar=new int[]{1,2,3}…..“索引值”是什么意思?因为它是由您在初始值设定项中指定的元素数暗示的?
0:  iconst_4      // loads the int const 4 onto the stack
1:  newarray int  // instantiate a new array of int 
3:  astore_1      // store the reference to the array into local variable 1