Java中import static使用方式小结
作者:青衫客36
import static是Java中用于导入静态成员的特性,可以直接导入静态方法、常量、内部类和枚举成员,本文就来介绍一下Java中import static使用,感兴趣的可以了解一下
import static基本介绍
import static 的作用是把某个类中的 静态方法 直接引入当前类的作用域,从而在调用时可以省略类名前缀。当然,import static 在 Java 中不仅可以导入 静态方法,还可以导入 静态变量 / 静态常量 / 静态内部类 / 静态枚举成员。
✅ 能导入的内容
静态方法
import static java.util.Objects.requireNonNull;
String s = requireNonNull("abc");
静态常量 / 变量
import static java.lang.Math.PI; import static java.lang.Math.E; double area = PI * r * r;
静态内部类
import static java.util.Map.Entry;
for (Entry<String, String> e : map.entrySet()) {
System.out.println(e.getKey());
}
枚举常量
import static java.time.DayOfWeek.*;
DayOfWeek today = MONDAY;
if (today == FRIDAY) {
System.out.println("Weekend is coming!");
}
❌ 不能导入的内容
- 实例方法 / 实例变量(因为它们依赖对象实例,不能通过
ClassName.method()直接调用)。 - 构造方法(构造函数本来就不能被继承或静态调用)。
总之,import static 可以导入 类中所有的静态成员(方法、常量、内部类、枚举值),但不能导入需要对象实例才能访问的成员(实例方法、实例变量)。
测试案例
下面通过一个小 Demo,把 静态方法 / 静态常量 / 静态内部类 / 枚举常量 的 import static 用法都使用一遍。
package per.mjn.demo;
import static java.lang.Math.*; // 导入静态常量 & 方法
import static java.util.Map.Entry; // 导入静态内部类
import static java.time.DayOfWeek.*; // 导入枚举常量
import static java.util.Objects.requireNonNull; // 导入静态方法
import java.time.DayOfWeek;
import java.util.HashMap;
import java.util.Map;
public class StaticImportDemo {
public static void main(String[] args) {
// 1. 使用静态常量 (Math.PI, Math.E)
double r = 2.0;
double area = PI * pow(r, 2); // 直接用 PI 和 pow()
System.out.println("圆面积: " + area);
System.out.println("自然常数 e: " + E);
// 2. 使用静态方法 (Objects.requireNonNull)
String s = requireNonNull("Hello");
System.out.println("字符串: " + s);
// 3. 使用静态内部类 (Map.Entry)
Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 95);
scores.put("Bob", 88);
for (Entry<String, Integer> e : scores.entrySet()) {
System.out.println(e.getKey() + " -> " + e.getValue());
}
// 4. 使用枚举常量 (DayOfWeek.MONDAY, FRIDAY)
DayOfWeek today = MONDAY; // 直接用 MONDAY 而不是 DayOfWeek.MONDAY
if (today == FRIDAY) {
System.out.println("周五啦,周末快到了!");
} else {
System.out.println("今天是: " + today);
}
}
}
输出示例
圆面积: 12.566370614359172
自然常数 e: 2.718281828459045
字符串: Hello
Bob -> 88
Alice -> 95
今天是: MONDAY
这样我们就能看到 import static 的四种典型用法:
- Math.PI / Math.pow(静态常量 & 方法)
- Objects.requireNonNull(静态方法)
- Map.Entry(静态内部类)
- DayOfWeek.MONDAY(枚举常量)
static import最佳实践
✅ 推荐使用的场景
工具类中的语义明确方法 / 常量
方法名/常量名独特,不容易和其他类冲突。
例子:
import static java.util.Objects.requireNonNull;
import static java.lang.Math.PI;
double area = PI * r * r;
String s = requireNonNull("hello");
常量集合 / 枚举常量
写法更简洁,尤其是枚举。
例子:
import static java.time.DayOfWeek.*; DayOfWeek today = MONDAY;
单元测试断言 / Mock 框架
测试代码可读性提升明显。
例子:
import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; assertEquals(42, result); verify(service, times(1)).doSomething();
DSL 风格 API
让代码更“自然语言化”,常见于流式 API / 匹配器。
例子:
import static java.util.stream.Collectors.toList;
List<String> names = users.stream()
.map(User::getName)
.collect(toList());
❌ 不推荐使用的场景
- 方法名太通用: 比如
get()、set()、build(),看不出来源,建议保留类前缀:BuilderUtils.build()。 - 多个类里有相同名字的方法/常量:例如
StringUtils.isEmpty()和CollectionUtils.isEmpty(),同时 static import 会冲突,建议只保留类名前缀。 - 通配符导入过多:
import static xxx.*;在业务代码中容易引入过多方法,影响可读性和维护。测试代码里可以接受,但业务代码里建议只导入需要的成员。
📝 建议
- 业务代码:精确导入,控制范围,保证可读性。
- 测试代码:可以大胆用,尤其是断言、Mock。
- 团队规范:建议在 Code Style 文档里约定:
- 允许测试类使用
import static ...*。 - 业务代码必须显式导入具体方法或常量,不允许
*。
- 允许测试类使用
总之,能让代码更清晰就用,可能让人困惑就不用。
到此这篇关于Java中import static使用方式小结的文章就介绍到这了,更多相关Java import static 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
