在Java学习中,老师经常对我们说要理解和掌握变量在内存空间中的分配情况.的确,这个很难理解和举一反三.
对于一个Person类声明如下三个成员变量:
public class Person {
private String name;
private int age;
private char gender;
}
对于另外一个TestMain类如下:
public class TestMain {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请确定你一共要记录多少个人的信息?");
int len = scan.nextInt();
Person[ ] allPersons ; //声明一个引用类型的数组,但是还没有对象
allPersons = new Person[len]; //声明一个长度为len这么长得数组,由于是 Person引用类型的,故也没有对象,仅仅是在内存中声明了len这么多个 Person类型的引 用空间,需要初始化
for(int i = 0; i < len; i++){
allPersons[i] = new Person(); //由于前面的len这么多个也是引用,因此每次使用时应该都要new一个对象(因为只有对象才能调用方法),这时才在堆内存空间中分 配三个位置来装name,age和gender这三个变量
System.out.println("请输入第" + (i + 1) + "个人的名字:");
allPersons[i].setName( scan.next());
System.out.println("请输入第" + (i + 1) + "个人的年龄:");
allPersons[i].setAge(scan.nextInt());
}
}
}
比方说是 Person[ ] allPersons =new Person[len]; 用如下图来表示内存空间的分配情况: