java类变量须明确区分实例与静态语义:实例变量属对象、各实例独有;静态变量属类、所有实例共享;常量用public static final全大写下划线命名;禁用static存可变业务状态;推荐声明时初始化,避免依赖默认值;一律private封装,通过getter/setter控制访问;命名需精准表达意图,集合优先声明为接口类型。

Java 类变量(即成员变量)的声明方式直接影响程序的可读性、线程安全性与维护成本。规范声明不是为了满足语法,而是让变量“该在哪就在哪、该是什么就是什么、该用时才出现”。
类变量必须明确区分实例与静态语义
类中声明在方法外、但属于对象本身的变量是实例变量;加上 static 修饰的才是类变量(也称静态变量)。二者生命周期和共享范围完全不同:
- 实例变量每个对象独有一份,适合保存对象状态,如 private String userName;
- 静态变量属于类本身,所有实例共享,适合缓存、计数器或配置,如 private static int instanceCount = 0;
- 常量必须用 public static final 声明,且命名全大写加下划线,如 public static final int MAX_RETRY = 3;
- 避免用 static 存储可变业务状态(如用户登录态),容易引发并发问题或内存泄漏
初始化要主动,不能依赖默认值
虽然 Java 会给类变量赋予默认值(int 为 0,引用为 null),但隐式初始化会掩盖设计意图,增加空指针风险:
- 推荐在声明时直接初始化: private List
tags = new ArrayList(); - 若初始化逻辑复杂,应放在构造器或静态/实例初始化块中
- 对可能为 null 的引用类型,优先考虑使用 Optional 或明确注释其可空性
- 避免声明后长期不赋值,再在某个方法里突然初始化——这会让调用链变得脆弱且难追踪
访问控制要严格,禁止无意义 public 字段
类变量直接暴露为 public 会破坏封装,使外部代码绕过校验逻辑随意修改内部状态:
- 绝大多数类变量应设为 private,通过 getter/setter 控制访问
- setter 中可加入参数校验(如非空、范围检查)、事件通知或日志记录
- 只读字段用 private final + 构造器注入,确保不可变性
- 静态工具类中的常量可设为 public static final,但非常量静态字段一律 private
命名与类型要精准表达意图
变量名不是标签,而是契约。它应让人一眼看出用途、作用域和变化特征:
- 实例变量用小驼峰: userProfile、lastLoginTime
- 静态变量加前缀或上下文提示: DEFAULT_TIMEOUT_MS(常量)、sharedExecutor(可变静态资源)
- 避免模糊缩写:用 retryAttemptCount 而非 rac,用 isEmailVerified 而非 emailOk
- 数组/集合优先声明为接口类型: private List
orders; 而非 private ArrayListorders;
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











