之前写过一篇关于static的文章,此篇就当作是它的升级篇吧……
一:何为静态成员?被static修饰的成员……成员包括字段,属性,方法
二:如何访问静态成员?类名.静态成员(C#中不可用对象引用去调用静态成员)
三:静态成员被创建在内存的哪里?(是栈还是堆里呀?)
静态成员既不被创建于栈中,也不在堆中。它被创建在静态存储区中。如图:
四:静态成员什么时候就会钻进静态存储区呀,就是何时才被创建呀?
当类第一次被加载时,此类下面的所有静态成员会被加载到静态存储区中去。
何为类的第一次加载?
class Person
{
public static string name;
}
static void Main(string[] args)
{
Person p;
}
如以上的程序,虽然只是Person p;但仍然是对其Person类的一次访问。所以只要对类的一次访问,就算做是类的一次加载。而静态成员恰恰就是在类的第一次加载时(即对类的第一次访问时)便会创建到静态存储区中去了。
五:静态成员只会被创建一次,且只能有一份。
六:静态成员何时被回收?当整个程序全部退出时便会被垃圾回收。
七:静态成员不创建在对象中的另一种独特的理解:因为只要对类的第一次加载便会创建全部的静态成员,如Person p;此时没有创建Person对象,但静态成员会生成。所以存在这样一种情况,即静态成员存在了其类的对象并不一定存在,所以静态成员不会存在在一个对象中。