static关键字用于声明属于类本身而非实例的成员,类加载时初始化,所有对象共享同一份副本,可通过类名直接访问;其四大用法包括静态变量、静态方法、静态代码块和静态内部类。

static 关键字用于声明属于类本身、而非类实例的成员。被 static 修饰的变量、方法、代码块或内部类,在类加载时就初始化,所有对象共享同一份副本,无需创建对象即可访问。
static 变量(类变量)
用 static 修饰的字段称为类变量,它在内存中只有一份,被该类所有实例共享。
- 可通过“类名.变量名”直接访问,如 Math.PI;也可通过对象访问,但不推荐(易混淆归属)
- 常用于常量定义(配合 final),如 public static final double PI = 3.14159;
- 初始化时机:类首次被加载时执行,按声明顺序静态初始化器(static {})也会在此阶段运行
static 方法(类方法)
用 static 修饰的方法属于类,不依赖对象状态,不能访问非 static 成员(因为没有 this 引用)。
- 常见例子:main 方法必须是 public static void main(String[] args),JVM 启动时无需实例化类就能调用
- 工具类方法(如 Collections.sort()、Objects.equals())通常设计为 static,便于直接调用
- 不能使用 this 或 super,也不能重写(但可被子类同名 static 方法隐藏)
static 代码块
static {} 块在类加载时执行一次,常用于初始化复杂的静态资源(如缓存、配置读取)。
- 多个 static 块按出现顺序执行,且只执行一次
- 适合替代静态变量的复杂初始化逻辑,比如加载驱动、预热数据结构
- 示例:static { System.loadLibrary("mylib"); }
static 内部类
用 static 修饰的嵌套类称为静态内部类,它不持有外部类实例的引用,可独立于外部类对象存在。
- 可以直接访问外部类的 static 成员,但不能访问非 static 成员(无外部类实例)
- 创建对象无需外部类实例:OuterClass.StaticInner inner = new OuterClass.StaticInner();
- 适合工具性、与外部类状态无关的辅助类,比如 HashMap.Entry
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











