喜欢
public static student[] arr = new student[10];
现在,学生是一个具有一些实例变量的类,name(String)
并且age(int)
. 我想知道,一旦这条线被执行,会发生什么?所有十个引用都会获得内存还是我必须单独分配它们?如果尝试访问student[5].age
怎么办?我需要知道内存分配状态..谢谢......
喜欢
public static student[] arr = new student[10];
现在,学生是一个具有一些实例变量的类,name(String)
并且age(int)
. 我想知道,一旦这条线被执行,会发生什么?所有十个引用都会获得内存还是我必须单独分配它们?如果尝试访问student[5].age
怎么办?我需要知道内存分配状态..谢谢......
执行上述语句时,JVM 会创建 10 个连续的内存位置,每个位置都足够大以保存对student
. 但是,此数组将不包含引用,或者null
如果您愿意的话。当您执行语句时,将在堆上创建arr[0] = new student();
一个student
对象,并将其引用保存在arr[0]
. 请记住,数组也是在堆上分配的。
因此,一旦您创建了 10 个student
对象,每个对象都将分配到堆上的某个位置,但它们的引用将存储在arr
是的
public static student[] = new student[10];
该行一执行,就JVM
为 10 个学生分配内存references
。
从Arrays的官方文档中,查看流程。
// declares an array of integers
int[] anArray;
// allocates memory for 10 integers
anArray = new int[10];
// initialize first element
anArray[0] = 100;
当您创建对象数组时,只会创建引用变量。在您的情况下,学生类的参考变量。
在下图中,创建了一组参考变量。然后,您可以稍后将这些引用变量指向实际对象。
public static student[] arr = new student[10];
将为 10 个学生分配内存。这些内存被空填充。
所以在这里你不能访问student[5].age
,因为对实际对象的引用不存在。
我们需要单独创建对象引用,如下所示
for(int i=0;i<10;i++){
student[i]= new Student();
}
如果您在创建实际对象引用之前访问 student[5].age,您将以 NullPointerException 结束。
所有十个引用都会获得内存还是我必须单独分配?
您将获得十个参考文献的空间。这些引用将被初始化为null
. 如果您希望它们设置为 以外的任何值null
,则必须单独进行。