static关键字声明类级别成员,包括静态变量(所有实例共享)、静态方法(仅访问静态成员)、静态代码块(类加载时执行一次)和静态内部类(不依赖外部类实例)。
static 关键字用于声明属于类本身、而非类实例的成员(变量或方法)。这类成员不依赖对象创建,可通过类名直接访问,节省内存且便于共享数据或工具功能。
静态变量:类级别的共享存储
静态变量在类加载时初始化,所有实例共享同一份内存空间。适合保存计数器、配置常量或缓存等全局状态。
- 用 类名.变量名 直接访问,无需 new 实例
- 不能在非静态方法中用 this 引用静态变量(this 指向实例,而静态成员不属于实例)
- 示例:public static int count = 0; —— 所有 Student 对象共用一个 count
静态方法:不依赖实例的工具函数
静态方法只能访问静态变量和其他静态方法,无法使用 this 或 super,也不能直接调用非静态成员。
- 常见用途:工厂方法(如 Integer.valueOf())、数学计算(Math.abs())、配置初始化
- 若需访问实例成员,必须显式传入对象引用作为参数
- 构造器不能被声明为 static(构造器本就是用来创建实例的)
静态代码块:类加载时的一次性初始化
用 static { ... } 定义,在类首次被加载时执行,常用于复杂静态变量的初始化逻辑。
- 只执行一次,早于任何对象创建和 main 方法
- 多个静态块按出现顺序依次执行
- 适合加载驱动、读取配置文件、初始化静态集合等场景
静态内部类:可独立于外部类实例存在
静态内部类不持有对外部类实例的隐式引用,可直接通过 外部类名.内部类名 实例化。
- 不能直接访问外部类的非静态成员(无 this 引用)
- 相比普通内部类更轻量,避免内存泄漏风险
- 常用于工具类封装,如 Collections.EmptyList