我们如何在Java中创建任何类或接口的数组?
我想问一个在java中最让我困惑的问题
当我们创建一个引用数组时。到底发生了什么? 我有
class A {
String name;
}
当我们创建一个类似
A[] arr = new A[5];
。到底发生了什么?是否调用构造函数?如果不是,那么内部会发生什么
既然数组是对象,我们如何才能做到这一点呢
interface G {
void disp();
}
G[] x = new G[5];
请帮我消除困惑。它妨碍了我进行其他许多行动
# 1 楼答案
创建阵列时:
不调用任何构造函数,您要做的唯一一件事就是指定对A的引用的连续内存范围
您可以通过尝试访问特定索引处的数组来测试它:
A温度=arr[0]
你会看到temp变量为null,这意味着它的实例是未定义的
我不明白如何创建interface的实例
# 2 楼答案
对象数组的创建方式与基本类型数据项数组的创建方式类似,如下所示:
下面是这个类的定义
上面的语句创建了一个数组,该数组可以保存对七个学生对象的引用。它不会创建学生对象本身。它们必须使用Student类的构造函数单独创建。studentArray包含七个存储空间,其中可以存储七个Student对象的地址。如果我们甚至在创建学生对象之前就尝试访问它们,就会发生运行时错误。例如,下面的语句在运行时抛出NullPointerException,这表明studentArray[0]尚未指向学生对象
必须使用Student类的构造函数实例化Student对象,并且应该按照以下方式将其引用分配给数组元素
这样,我们也可以创建其他学生对象。如果必须使用不同的构造函数创建每个学生对象,我们会多次使用类似于上述的语句。然而,在这种特殊情况下,我们可以使用for循环,因为所有学生对象都是使用相同的默认构造函数创建的
上面的for循环创建七个学生对象,并将其引用指定给数组元素。下面这样的陈述是有效的
增强for循环在这里找到了一个更好的应用程序,因为我们不仅可以得到Student对象,还可以修改它。这是因为学生是参照类型。因此,增强for循环的头中的变量将存储对Student对象的引用,而不是Student对象的副本,当使用int等基元类型变量作为数组元素时,就是这种情况
回想一下,当数组的类型为int时,我们无法以类似的方式分配给数组元素
此外,在对象数组的情况下,当我们将数组元素传递给一个方法时,对象很容易发生变化。这是因为传递的元素也是引用类型的项。这与使用int数组时的情况不同。下面说明了这个概念
将输出与数组类型为int[]时的输出进行比较
处理对象数组与处理基元类型的数组非常相似。唯一需要记住的是在运行时抛出NullPointerException的可能性,同时还要记住数组元素本身是引用类型,这与作为参数传递时的情况有细微的区别。此外,可以使用增强的for循环来初始化数组元素
Refrence