【发布时间】:2014-11-22 01:31:38
【问题描述】:
发这个查询是为了基本了解点喜欢
对象是类实例或数组;
数组是
Object类的子类;在 Java 中,除了基元以外的所有实例化的对象都是对象。
这是我对在 Java 中使用数组的理解。
考虑到下面的程序,
/* dummy.java */
class C {
private int i;
public C() {
i = 1;
System.out.println("Am in constructor");
}
}
public class dummy {
public static void main(String[] args) {
C[] c = new C[2]; // Line 11
c[0] = new C();
System.out.println(c);
}
}
一个class [LC类型的对象在运行后在运行时创建,
C[] c = new C[2]; //Line 11
在上面的代码中。 class [LC 是 Object 类的直接子类。在上述代码中运行Line 12 后,引用变量c 指向该对象(如下图红色边界所示)。引用变量位于堆栈中,class C 类型的对象将进入堆中。
对于上述代码中line 11 & 12的以下更改
C[][] c = new C[2][2];
c[0][0] = new C();
如下图所示。
我的理解正确吗?如果是,您能否详细解释一下class [LC 在运行时实例化对象的用法?
注意:C[].class 给出了运行时的实际类型,即class [LC。
【问题讨论】:
-
几乎正确。但是, C 的实例不是数组的一部分(与您的红色边界所暗示的相反)。
-
您希望从中学到什么?你为什么想知道。这可以帮助别人为您提供更好的答案。
-
还有一些细节是数组的内存将保存数组的大小、类型,并且可能不连续。
-
@OliverCharlesworth 当您说 C 的实例不是数组的一部分时,我没有听懂您的意思。 C 的实例位于堆中,与引用变量不同,对吗?
-
数组和 C 实例都是对象,所以它们都在堆上(至少在概念上)。但它们是独立的对象。
标签: java arrays object runtime new-operator