java抽象类通过protected abstract声明生命周期钩子方法(如oninit、onexecute、oncleanup)强制子类实现,再以public final lifecycle()模板方法固化执行流程,编译期确保各阶段不遗漏。

Java 中抽象类通过抽象方法 + 模板方法模式,精准约束子类必须重写指定的生命周期方法——不是靠运行时提醒,而是编译期强制拦截,漏写就报错,根本过不了编译。
用 protected abstract 定义生命周期钩子
把初始化、核心执行、清理等关键阶段声明为 protected abstract 方法,例如:
-
protected abstract void onInit();—— 子类必须提供初始化逻辑 -
protected abstract void onExecute();—— 主体业务执行点 -
protected abstract void onCleanup();—— 资源释放或收尾动作
这些方法不写方法体,也不加 private 或 final(语法非法),确保子类能继承、可见、且必须实现。访问权限设为 protected 是合理选择:对外不可见,对子类完全开放,语义清晰。
用 final 模板方法固化生命周期流程
在抽象类中定义一个 public final void lifecycle(),把整个生命周期串起来:
- 调用
onInit()→onExecute()→onCleanup() - 中间可插入父类已实现的通用逻辑,比如日志打点、异常包装、事务开启/提交
- 因为是
final,子类无法重写或打乱顺序,只能填空
这样既保证了“什么时候做”,又强制了“每个环节都得做”。
构造器中校验关键状态(可选增强)
如果某个生命周期方法的结果会影响后续行为(如配置加载必须成功),可在抽象类构造器里做轻量检查:
- 调用一个
protected abstract Config loadConfig(); - 子类实现后返回配置,父类构造器拿到后验证非空或格式合法
- 若校验失败,直接抛
IllegalStateException,避免对象半初始化
注意:不要在构造器中调用 未实现的抽象方法(子类字段尚未初始化,易 NPE),应只调用已声明为 abstract 且由子类承诺会提供的方法,并确保其契约明确。
配合空钩子方法支持可选扩展
除了必须重写的抽象方法,还可提供默认为空的 protected 钩子方法,供子类按需介入:
-
protected void afterExecute() { }—— 执行成功后回调,风控子类可加审计,普通子类无需理会 -
protected void onError(Throwable t) { }—— 异常处理扩展点
这类方法不是强制的,不参与编译检查,但命名规范(afterXXX / onError)和 protected 权限共同构成一套可读、可控、可演进的生命周期契约。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











