企业级Java权限设计核心是字段一律private、方法按协作范围分层设权、包结构驱动default落地、顶层类与构造器遵守硬性规则。

企业级 Java 项目中,访问修饰符不是语法点缀,而是权限设计的底层契约。用错一个 public 可能导致模块边界失效,漏掉一个 private 就可能埋下数据篡改隐患。规范的核心不是死记表格,而是建立“谁该看到什么”的工程直觉。
字段一律 private,暴露需有明确理由
所有类成员变量默认加 private,这是铁律。哪怕只是临时计数器或缓存标记,也不应开放直接读写。
- 敏感字段(密码、token、金额)必须
private+final(如不可变 ID),配合只读 getter - 需要外部修改的字段,只提供带校验逻辑的 public setter,而不是把字段本身设为 public 或 protected
- 完全不对外的辅助字段(如解析中间状态、重试次数计数器),连 getter 都不暴露
方法按协作范围分层设权
方法的修饰符要匹配它的实际使用场景,而非开发便利性。
-
对外服务接口:Controller 层方法、Service 入口、工具类核心能力 →
public - 包内协作逻辑:DAO 工具、DTO 转换器、内部状态检查器 → 不写修饰符(default),仅限同包调用
-
继承扩展点:父类预留钩子(如
beforeSave()、formatResult())→protected,且文档注明“供子类重写” -
纯内部实现:参数校验、字符串拼接、日志封装 →
private,不参与任何跨类协作
包结构驱动 default 权限落地
default(包私有)不是被遗忘的选项,而是模块化设计的关键杠杆。它依赖清晰的包划分才能生效。
立即学习“Java免费学习笔记(深入)”;
- 每个业务域建独立包(如
com.company.order.entity、com.company.order.infra) - 将仅在本域内复用的工具类、异常类、常量类设为 default 类,禁止跨包引用
- 避免“大杂烩包”(如全塞进
com.company.util),否则 default 失去隔离意义
构造器和类本身的权限约束
顶层类和构造器的修饰符有硬性规则,违反会导致编译失败或架构隐患。
- 顶层类只能是
public或 default;public 类必须与文件同名,一个文件只允许一个 public 类 - 构造器通常设为
public(普通实例化)或protected(仅限继承创建),避免private除非是单例或 Builder 模式内部使用 - 禁止对非内部类使用
protected或private修饰——这类错误 IDE 会报红,但团队规范需提前约定


















