可以导入所有静态成员,但需用全限定名加通配符(如import static java.lang.Math.),仅支持public static成员,不支持包级通配或静态内部类本身导入,同名成员会导致编译错误,建议显式导入单个成员而非通配。

可以导入所有静态成员,但必须明确指定类的全限定名,并使用 * 通配符语法,例如:
import static java.lang.Math.*;
这行语句会将 Math 类中所有 public static 方法和字段(如 PI、max()、sqrt() 等)直接引入当前作用域,调用时无需写 Math. 前缀。
不过要注意以下关键限制:
-
仅支持类或接口中的
public static成员:非public或非static的成员不会被导入,也不会报错,只是被忽略。 -
不支持包级通配:
import static com.example.util.*;是非法语法,Java 不允许按包导入静态成员。 - *静态内部类不能通过 `
导入本身**:import static OuterClass.*;不能把NestedStaticClass这个类型拉进来;若要导入静态内部类,必须显式写import static com.example.OuterClass.NestedStaticClass;`。 -
同名成员引发冲突时编译失败:如果两个静态导入都提供了
emptyList(),写emptyList()就会报 “reference to emptyList is ambiguous”。
实际开发中建议:
立即学习“Java免费学习笔记(深入)”;
- 避免
.*通配导入,尤其在业务代码中 - 优先选择显式导入高频、无歧义的单个成员,比如:
import static java.util.Objects.requireNonNull; import static java.time.temporal.ChronoUnit.DAYS;
- 测试类中可适度放宽(如 JUnit 断言),但仍需确保无冲突、来源清晰
本质上,import static ... *; 是语法允许的,但不是推荐实践。


















