Java中的static都能用来修饰什么? (1)
面试回答¶
面试官: Java 中的 static 都能用来修饰什么?
你:
static 的核心作用是让成员脱离对象实例,变成类级别的东西。它可以修饰变量、方法、代码块、内部类和静态导入,每样都有不同的用法和坑。
-
静态变量(类变量) 用
static修饰的成员变量,属于类本身,只在类加载时初始化一次,被所有实例共享。典型场景是常量、计数器、配置项。比如public static final int MAX_SIZE = 100;。如果不用static,每个 new 出来的对象都有一份自己的副本,浪费内存。 -
静态方法(类方法)
static方法同样属于类,直接用类名.方法()调用,不需要 new 对象。像工具类的Math.max()、Collections.sort()全是静态方法。记住一条铁律:静态方法里不能直接访问非静态成员,因为它没有隐含的this引用。 -
静态代码块
static { ... }在类加载时执行,且只执行一次,通常用来初始化复杂静态变量,或者加载本地库。执行顺序是:父类静态块 → 子类静态块 → 父类实例块/构造 → 子类实例块/构造。这是一道经典的面试题。 -
静态内部类 用
static修饰的嵌套类,可以不依赖外部类实例直接创建。比如new Outer.Inner()。如果没有static,内部类会隐含持有外部类引用,容易导致内存泄漏。HashMap里的Node就是静态内部类。 -
静态导入
import static java.lang.Math.*;之后,可以直接写max(1,2)而不必写Math.max。方便,但别滥用,否则代码可读性会下降。
顺序问题是最常考的:

一句话:static 就是把东西从实例级别提升到类级别,要时刻注意它没有 this,且执行时机在类加载阶段。