-
对于静态变量,静态变量并不是说其值不能改呢,不能改变值的变量叫做常量,用final关键字修饰。静态变量的值是可以改变的,而且它会保持最新的值。称其为静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。
-
静态变量 类型说明符时static。
静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该区域中的数据在整个程序的运行区间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束。静态变量虽然在整个程序的运行过程中始终存在,但是在它作用域之外不能使用。
另外,属于静态存储方式的量不一定就是静态变量。例如,外部变量虽然属于静态存储方式,但不一定是静态变量,必须由static加以定义后,才能成为静态外部变量,或称为静态全局变量。
所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。
静态变量可以在任何可以申请的地方申请,一旦申请成功后,它将不再接受其他的同样申请。
方法中不能定义用static修饰的变量,因为静态变量是被在同类中所有的方法所共享的。
.
.
.
. -
静态变量、实例变量和局部变量的区别:
存储位置:静态变量(类变量)存储在静态区(全局区)
实例变量(成员变量):存储在堆内存中。
局部变量存储在栈内存中。
静态变量的寿命要比成员变量的寿命要长,直到类不能被调用为止,而成员变量在对象消失时就死亡了。
-
static应用范围:可用于内部类、方法和变量
-
标记一个方法为static,意味着这个方法,被所在类的所有实例公用,在类装载时初始化,被所有该类的实例共享,同时意味着:
-
[a] static方法内部不能引用非static变量
-
[b]static方法不能被子类重写为非static方法
-
[c]父类的非static方法不能被子类重写为static方法
-
[d]static代码块可以用static{}来完成,在类被第一次装载时执行初始化,先于静态方法和其他方法的执行。
-
[e]标记一个变量为static,则该变量在内存中有不变的位置,相当于全局变量,所有类的实例都访问同一个存储变量区域。对其修改,对于所有类的实例来说都是可见一致的。