对象内存结构
栈:用于存储基本数据类型的值或者是局部变量。先进后出,存取的容量小,存取的速度快。
堆:用于存储引用数据类型,存取容量大,存取速度慢。。
数据共享区:用于存储引用数据类型,存储一些共享的数据(方法)。
每一个类class加载到数据共享区中,jvm会解析这个类的内容,方法是每个对象共享,但是方法内的属性的是哪个对象调用这个方法,那么这个属性就是在那个对象的。对象存储在堆中,引用存储在栈中,堆中的每一个对象的数据是隔离的。
成员变量
成员变量是定义在类中,也可以叫类的属性。
除了成员变量其余的都是局部变量。
属性的特点:
●作用范围:根据权限修饰符来定。
●存储位置:堆内存或者数据共享区。
●默认值:有。
●生命周期:由jvm通过垃圾回收机制来自动回收。
如果一个引用数据类型的变量nll,意味着不指向任何的对象,堆中的对象就会变成匿名对象,很快就会被gc(垃圾回收器)回收。如果在运行的过程中对象的引用没有被置空,那么对象的属性就会能到大括号结束而被回收。
局部变量
除了在类中定义的变量,其余全是局部变量。(定义在方法中或者语句中)
局部变量的特点:
●作用范围:只限于所定义的大括号,以及大括号内的子括号内有效。
●存储的位置:存储在栈内存中。
●默认值:无,局部变量必须赋值。
●生命周期:所属的大括号结束就消失。