Java中static的特性

  • 对于静态变量,静态变量并不是说其值不能改呢,不能改变值的变量叫做常量,用final关键字修饰。静态变量的值是可以改变的,而且它会保持最新的值。称其为静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。

  • 静态变量 类型说明符时static。
    静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该区域中的数据在整个程序的运行区间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束。静态变量虽然在整个程序的运行过程中始终存在,但是在它作用域之外不能使用
    另外,属于静态存储方式的量不一定就是静态变量。例如,外部变量虽然属于静态存储方式,但不一定是静态变量,必须由static加以定义后,才能成为静态外部变量,或称为静态全局变量。
    所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。
    静态变量可以在任何可以申请的地方申请,一旦申请成功后,它将不再接受其他的同样申请。
    方法中不能定义用static修饰的变量,因为静态变量是被在同类中所有的方法所共享的。
    .
    .
    .
    .

  • 静态变量、实例变量和局部变量的区别:

存储位置:静态变量(类变量)存储在静态区(全局区)

实例变量(成员变量):存储在堆内存中。

局部变量存储在栈内存中。

静态变量的寿命要比成员变量的寿命要长,直到类不能被调用为止,而成员变量在对象消失时就死亡了。

  • static应用范围:可用于内部类、方法和变量

  • 标记一个方法为static,意味着这个方法,被所在类的所有实例公用,在类装载时初始化,被所有该类的实例共享,同时意味着:

  • [a] static方法内部不能引用非static变量

  • [b]static方法不能被子类重写为非static方法

  • [c]父类的非static方法不能被子类重写为static方法

  • [d]static代码块可以用static{}来完成,在类被第一次装载时执行初始化,先于静态方法和其他方法的执行。

  • [e]标记一个变量为static,则该变量在内存中有不变的位置,相当于全局变量,所有类的实例都访问同一个存储变量区域。对其修改,对于所有类的实例来说都是可见一致的。

猜你喜欢

转载自blog.csdn.net/w_Antetokounmpo/article/details/89003837