通过对象数组调用构造函数

nr5*_*nr5 1 java constructor calling-convention

class A
{
  static int i;
  A()
  {
    System.out.println(++i);
  }
  public static void main(String h[])
  {
    A obj[] = new A[30]; 
  }
}
Run Code Online (Sandbox Code Playgroud)

obj [30] =新A [30]; : - 这一行应该调用默认构造函数30次?

Rei*_*eus 12

这条线

A obj[30] = new A[30];
Run Code Online (Sandbox Code Playgroud)

不会调用构造函数A.它创建了30个未实例化的引用A;

要实例化30个对象引用,可以使用:

A obj[] = { new A(), new A(), ..28 more ->
};
Run Code Online (Sandbox Code Playgroud)

或者在这种情况下更好的给定元素数量:

for (int i=0; i < obj.length; i++) {
   obj[i] = new A();
}
Run Code Online (Sandbox Code Playgroud)

注意,30在数组大小声明中的第一次使用是非法的.

A obj[30] = new A[30];
      ^
Run Code Online (Sandbox Code Playgroud)