1. 在类中,一般只是声明静态成员变量,但是并没有定义。
2. 声明只是表明了静态成员变量的数据类型和属性,但是并不分配内存;
3. 普通成员是“对象(实例)级别”的。而静态成员是“类级别”的,它和类的地位等同,属于类级别的成员,因此它应该先于该类任何对象的存在而存在,应该被该类的所有对象所共享。
4. 现在,假定要实例化该类的一个对象,如果之前没有定义过类的静态成员变量,那么这个时候静态成员变量这个时候肯定要定义,那么会发生什么样的事情?这时候才去定义那个静态成员吗?显然是不合适的。
因为,如果有另外一个线程也要创建该类的对象,那么按照这个方式去定义那个静态成员,会产生两种可能的情况:
1. 重复定义;
2. 就算不产生重复定义的情况,也会产生竞争,甚至死锁,以至于对象无法创建。
显然,编译器不能这么干。那么很合理的解决办法,就是事先在类的外部把它定义好,然后再供所有的对象共享。不过注意,类的静态常量成员可以类内初始化。