static 关键字修饰的成员属于类本身,类加载时初始化且所有实例共享;包括静态变量(类变量)、静态方法(不可访问非静态成员)、静态代码块(只执行一次)和静态内部类(不依赖外部类实例)。

static 关键字在 Java 中表示“静态”,它修饰的成员(变量、方法、代码块、内部类)属于类本身,而不是某个具体对象。也就是说,这些成员在类加载时就初始化,且所有实例共享同一份副本。
static 变量:类级别的共享数据
被 static 修饰的变量称为静态变量或类变量,它不依赖于对象存在,可通过“类名.变量名”直接访问。
- 静态变量在类加载时分配内存,生命周期与类相同;
- 所有对象共享同一个静态变量,修改任一对象的静态变量会影响其他对象;
- 静态变量可被 public、private、protected、default 修饰,但不能用 abstract、final(可加,但含义不同)、synchronized、native 等修饰;
- 示例:public static int count = 0; —— 常用于计数器、配置常量等场景。
static 方法:无需实例即可调用
静态方法属于类,不依赖对象实例,因此不能访问非静态成员(因为此时可能还没有对象),也不能使用 this 或 super。
- 静态方法只能访问静态变量和其他静态方法;
- 常见用途包括工具方法(如 Math.max()、Collections.sort())和 main 入口方法;
- main 方法必须是 public static void main(String[] args),这是 JVM 启动程序的约定;
- 子类可以继承父类的静态方法,但不能重写(只能隐藏)。
static 代码块:类加载时执行一次
静态代码块用 static { ... } 定义,在类第一次被加载进 JVM 时执行,且只执行一次,常用于初始化静态资源。
立即学习“Java免费学习笔记(深入)”;
- 多个静态代码块按定义顺序执行;
- 适合做一次性初始化操作,比如加载驱动、读取配置文件、初始化静态集合等;
- 不能访问非静态成员,也不能抛出受检异常(除非用 try-catch 包裹)。
static 内部类:独立于外部类实例的嵌套类
被 static 修饰的内部类称为静态内部类,它不持有外部类的引用,因此可以直接通过“外部类名.内部类名”创建实例。
- 静态内部类可以访问外部类的静态成员,但不能访问非静态成员;
- 创建对象不需要先创建外部类对象,例如:Outer.Inner obj = new Outer.Inner();;
- 适合封装与外部类逻辑相关但又无需访问其实例状态的工具类或辅助类。










