static深入理解(深入浅出)

来源:互联网 发布:怎么增加淘宝访客量 编辑:程序博客网 时间:2024/06/06 10:13
在C#(java/C等等)语言中有这样一种声明变量的方式:static 类型名关键字 变量名
我们都知道static直译是"静止的"、"不变的"意思,行内中我们习惯称为"静态"
那么有意思的事情来了,既然是"不变的"那么为什么用了static该变还是变呢,例如这样
public void test()
        {
    static int b = 10;
        }
这样还是改变了b的值.
剖析:
程序编译的时候会发现b用了static这个关键字,且立马给b分配内存空间,且b所指的值(10)存于栈中(单指值类型,引用类型于堆中),而b则是指向于存放"10"这个值得地址的一个标记,简单来说b存放了值"10"的地址,通过b则可以访问到对应的值,这个值是可以被改变的,但是!!!b是在程序运行期间无法改变的,也就是指向"10"的那个地址不能被改变,这就导致了当程序再次运行test的时候不会再为b重新分配存储空间.


总结:
1.用static声明了的变量只会在程序重新执行的时候才会分配空间 以及地址
2.值可变,而指向其地址不变



使用时需注意:static声明了的变量不会被GC回收,所以慎用!


如果错误请指正!!!!!!!谢谢!