声明对象时的内存模型:我们在声明对象变量后,对象的内存还没有任何数据,此时我们称这个对象是一个空对象。
空对象不能使用,因为它还没有得到任何“实体”,必须再进行为对象分配变量的操作,即为对象分配实体。为对象分配变量后的内存模型
先为成员变量分配内存,然后执行构造方法中的语句。
如果成员变量在声明时没有指定初值,所使用的构造方法也没有对成员变量进行初始化操作,那么,对于整型的成员变量,默认初值是0;浮点型,默认初值是0.0;布尔型,默认初值是false;引用型,默认初值是nullnew ShuiHuZhuan();new运算符在为成员变量分配好内存后,将计算出一个称作引用的值(该值包含着代表这些成员变量的内存以及相关的重要信息),即new ShuiHuZhuan();是一个值。如果把该值赋给wusong:
wusong = new ShuiHuZhuan();那么Java系统分配的成员变量的内存单元将由wusong操作管理。
总结:所谓创建对象,就是指为对象分配变量,并获得一个引用,以确保这些变量由该对象来操作管理。
一个类可以通过使用new运算符创建多个不同的对象,这些对象的变量将被分配不同的内存空间。
wusong = new ShuiHuZhuan(); linchong = new ShuiHuZhuan();注:
对象的引用存在栈中,对象的实体(分配给对象的变量)存在堆中。
栈的优势是,存取速度比堆要快。缺点是,存在栈中的数据大小与生存周期必须是确定的,缺乏灵活性。堆的优势是,可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。