导包用于简化类名引用,仅在编译期生效;静态导入用于直接使用静态成员,避免类名前缀。导包如import java.util.arraylist;,静态导入如import static java.lang.math.sqrt;。

Java 中导包(import)和静态导入(import static)是两个不同层级的语法机制,目的都是简化代码书写,但作用对象和适用场景完全不同。
导包:让类名能直接用
导包的本质是告诉编译器——“当遇到某个没写全名的类时,请去指定位置找”。它不加载任何运行时资源,也不影响性能,只在编译期起作用。
-
导入单个类最清晰:比如
import java.util.ArrayList;,后续可直接写ArrayList<string> list = new ArrayList();</string> -
通配符导入整个包(慎用):如
import java.util.*;,会把java.util下所有已编译的公开类都纳入查找范围,但不会导入子包(如java.util.concurrent) -
不能只写包名:
import java.util;是非法语法,编译直接报错 -
同名类需显式限定:若同时要用
java.util.Date和java.sql.Date,必须至少一个用全限定名,例如java.util.Date now = new java.util.Date();
静态导入:让静态成员免写类名前缀
静态导入不是导入类,而是把某个类里的静态字段或静态方法“拉进当前作用域”,让你能像调用本地方法一样直接用它们。
-
常用形式:如
import static java.lang.Math.sqrt;后可直接写sqrt(16);import static org.junit.Assert.assertEquals;后可写assertEquals(2, a); -
支持通配符:如
import static java.lang.Math.*;可导入Math类所有静态成员(PI、abs()、max()等) -
不能导入构造器:
new XXX()永远不走静态导入,它属于实例创建行为 -
命名冲突要小心:如果
import static java.lang.Math.*;和int sqrt = 42;同时存在,再写sqrt(4)就会编译失败
什么时候该选哪个?
导包是日常必需操作,几乎所有非 java.lang 的类都需要它;静态导入则是可选优化,适合高频、无歧义、团队共识强的场景。
- 推荐用静态导入的:JUnit 断言方法(
assertTrue、assertNull)、Math常量与函数、Collectors工具方法等 - 不建议用静态导入的:业务类中自定义的静态工具方法,除非项目规范明确允许且命名足够独特
- 一个原则:如果删掉静态导入后,代码依然一眼能看懂是谁的方法,那它就适合静态导入;否则就老实用类名点出来
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











