static关键字表示成员属于类而非实例,类加载时初始化且仅一次;static方法不能调用非static成员因无this上下文;static内部类不依赖外部类实例;static不保证线程安全或单例。
static 关键字不是“共享内存”或“全局变量”的快捷写法,而是明确告诉 JVM:这个成员属于类本身,不依赖任何实例。
static 变量什么时候初始化?
类加载时初始化,且仅一次。它不随 new 出多少个对象而重复创建。
- 初始化时机在
static块中(如果有),或直接赋值语句处;static块按代码顺序执行,早于构造方法 - 多个类继承时,父类
static块先于子类执行 - 如果类从未被主动使用(如未访问其静态成员、未 new 实例、未反射加载),JVM 可能延迟加载——
static变量也就不初始化 - 注意:反序列化不会触发
static变量重置,它的值来自当前 JVM 状态,不是对象状态的一部分
static 方法为什么不能调用非static成员?
因为 static 方法运行时可能根本没有 this——它不绑定到任何实例,而实例变量和实例方法必须通过具体对象才能定位。