工具类应为final类且私有构造器,所有方法为static public,专注无状态、可复用的单一职责逻辑,避免实例化、非静态成员访问及业务耦合,理想情况下无共享可变状态。

在 Java 中,用 static 修饰的方法属于类本身,不依赖对象实例,非常适合封装通用、无状态的工具逻辑——这就是工具类(Utility Class)的核心设计方式。
工具类应声明为 final 且私有构造器
防止被继承或误创建实例,强调其纯静态用途:
public final class StringUtils {
private StringUtils() {} // 禁止实例化
public static boolean isBlank(String str) {
return str == null || str.trim().isEmpty();
}
}
所有方法必须是 static 且 public
确保外部可直接通过类名调用,无需 new 对象:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
正确写法:
StringUtils.isBlank(" ") -
错误写法:去掉
static就需先new StringUtils(),违背工具类本意 - 避免在 static 方法中访问非 static 成员(会编译报错)
常见工具类设计习惯
聚焦单一职责,命名清晰,方法粒度适中:
- 字符串处理:如
StringUtils、String.valueOf()(JDK 自带) - 集合操作:如
Collections.emptyList()、Lists.newArrayList()(Guava) - 日期转换:如
LocalDateTime.parse(...)或自定义DateUtils.format(...) - 避免塞入业务逻辑,只保留可复用、无副作用的操作
注意线程安全性
static 方法若操作共享可变状态(如静态变量、缓存),需同步控制;但理想工具类应是无状态的:
- 推荐:输入 → 计算 → 输出,全程不修改任何字段
- 慎用:
private static Map<string object> cache = new HashMap();</string>—— 若要用,考虑ConcurrentHashMap或加锁
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










