静态导入仅适用于静态成员,包括静态方法、静态字段及接口中的静态成员,不支持非静态成员、类本身、包名或子包;静态内部类可导入但需满足访问权限和全限定名要求。

不适用。
静态导入只适用于静态成员,且有明确限制条件,并非所有类或其成员都能被静态导入。
只能导入静态方法和静态字段
非静态方法、实例变量、构造器、普通内部类(非 static 的)都不支持静态导入。例如 import static com.example.MyClass.instanceMethod; 会直接编译失败,因为 instanceMethod 不是静态的。
静态内部类可以导入,但有条件
必须同时满足:
- 外层类和静态内部类都声明为
public - 导入语句需写全限定名,如
import static com.example.Outer.PublicStaticNested; - 不能用通配符导入类本身(
import static Outer.*;不合法) -
private或protected的静态内部类无法跨包导入,同包内也受限于访问级别
顶级类本身不能被静态导入import static java.util.List; 是非法语法。静态导入操作对象是“类的静态成员”,不是类类型本身。想简化类名使用,应靠普通 import,而非 import static。
接口中的静态成员可以导入
Java 8+ 接口中允许定义 public static final 字段和 public static 方法(默认方法不算),这些均可被静态导入,例如:
import static java.time.temporal.ChronoUnit.DAYS; import static java.time.temporal.ChronoUnit.HOURS;
常见误用会被编译器拒绝
- 导入非静态成员 → 编译错误:“not a static member”
- 导入包名或子包 → 语法错误,
import static后必须是类名加成员名 - 导入抽象类的静态成员 → 允许,只要该成员是
static且可访问 - 导入 enum 类型本身 → 不行;但可导入它的常量,如
import static java.time.DayOfWeek.MONDAY;或import static java.time.DayOfWeek.*;
本质上,静态导入不是“导入类”,而是“把某个类的指定静态成员提升到当前命名空间”。它只关心成员是否静态、是否可见、是否命名合法。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











