成员变量的生命周期
声明对象后,对该对象的访问需要依靠引用变量(栈中的c),那么当一个对象没有任何引用时,该对象被视为废弃的对象,属于被回收的范围,同时该对象中的所有成员变量也随之被回收。
成员变量的生命周期为:从对象在堆中创建开始到对象从堆中被回收结束。
请看如下的代码,演示了对象不再被引用:
Cell c = new Cell();
c = null ;
当将c赋值为null时,表示c不再指向刚刚分配的对象空间,此时成员变量失效。
局部变量的生命周期
一个运行的Java程序从开始到结束会有多次方法的调用。
JVM会为每一个方法的调用在栈中分配一个对应的空间,这个空间称为该方法的栈帧。一个栈帧对应一个正在调用中的方法,栈帧中存储了该方法的参数、局部变量等数据。
当某一个方法调用完成后,其对应的栈帧将被清除,局部变量即失效。
成员变量和局部变量对比
成员变量(全局变量):
1) 定义在类中,方法外(在整个类中都可以被访问)
2) 由系统设定默认初始值,可以不显式初始化
3) 所在类被实例化后,存在堆中,对象被回收时,成员变量失效
局部变量:
1) 定义在局部范围内
2) 没有默认值,必须自行设定初始值
3) 方法被调用时,存在栈中,方法调用结束时局部变量从栈中清除 [即对应的栈帧被清除]
在使用变量时需要遵循的原则为:就近原则
首先在局部范围找,有就使用;接着在成员位置
_________________________________________________________________________________________________________
静态变量(也叫做类变量,类属性)
由static修饰的变量称为静态变量,其实质上就是一个全局变量。如果某个内容是被所有对象所共享,那么该内容就应该用静态修饰;没有被静态修饰的内容,其实是属于对象的特殊描述。
成员变量和静态变量的对比
1、两个变量的生命周期不同
成员变量随着对象的创建而存在,随着对象被回收而释放。
静态变量随着类的加载而存在,随着类的消失而消失。
2、调用方式不同
成员变量只能被对象调用。
静态变量可以被对象调用,还可以被类名调用。
3、别名不同
成员变量也称为实例变量
静态变量也称为类变量
4、数据存储位置不同
成员变量存储在堆内存的对象中,所以也叫对象的特有数据。
静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。