Java面向对象编程规范以“可读、可维护、可扩展、安全、一致”为目标,从语言特性、工程实践和团队协作三层面形成;类需遵守JavaBean契约,命名严格遵循行业约定,封装强调职责分离,构造与初始化明确边界。

Java 面向对象编程规范不是凭空制定的,而是围绕“可读、可维护、可扩展、安全、一致”这五个目标,从语言特性、工程实践和团队协作三个层面逐步沉淀形成的。核心不在于发明规则,而在于严格遵循已被验证的约定,并在项目中统一落地。
类设计必须遵守 JavaBean 基础契约
这是面向对象最底层的规范起点,所有实体类、DTO、VO、DAO 等数据载体类都应满足:
- 类声明为 public,且文件名与类名完全一致
- 提供显式的 无参 public 构造器(即使写了带参构造,也必须补上无参的)
- 所有字段用 private 修饰,禁止 public 或 package-private 成员变量
- 每个字段配套标准 getter/setter:如
private String name→getName()/setName(String);private boolean active→isActive()/setActive(boolean) - 推荐实现
Serializable,并显式声明private static final long serialVersionUID = 1L;
命名与结构需严格遵循行业通用约定
命名是代码的第一文档,直接影响理解成本:
-
类名:大驼峰,名词为主,见名知意(
UserService、OrderItem,而非UserDeal或DoUser) -
方法名:小驼峰,动词开头,表达行为意图(
calculateTotal()、validateEmail(),避免doCheck()或isOK()) -
常量:全大写+下划线(
DEFAULT_TIMEOUT_MS) -
包名:全小写,用反向域名(
com.example.order.service) - 类内部成员顺序:按可见性分组,依次为
public→protected→package→private,每组内先字段后方法
封装与访问控制要真正落地,不止于语法
private 不是终点,而是封装的起点:
- setter 中不做业务校验、日志、状态联动等副作用操作;校验应由专门的 Validator 或 Service 层承担
- getter 仅返回字段值,不触发远程调用、计算或修改其他状态
- 避免通过对象引用调用静态成员(如
obj.MAX_SIZE),一律用ClassName.MAX_SIZE - 对外暴露的方法若被覆写,必须加
@Override注解,防止签名误写(如get0bject()混淆数字 0 和字母 O) - 比较字符串等可能为 null 的对象时,用常量在前:
"success".equals(status),而非status.equals("success")
构造与初始化须明确职责边界
对象创建阶段就该决定其初始状态是否合法:
- 无参构造器用于框架反序列化或默认实例化;带参构造器建议覆盖全部必要字段(常用 Lombok 的
@AllArgsConstructor或手写全参构造) - 若某字段必填,不建议依赖 setter 补充,而应在构造时传入(可配合 Builder 模式提升可读性)
- 避免在构造方法中调用可被子类覆写的方法(可能导致子类字段未初始化就被访问)
- 资源型对象(如含 IO、连接等)不建议在构造器中完成重操作,应分离出
init()方法并由容器或调用方显式触发
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











