关键看箭头样式与代码实现:依赖为带箭头的虚线,对应方法参数、局部变量或静态调用;关联为带箭头的实线,对应成员变量的长期持有。

看类图理解关联和依赖,关键不是背定义,而是盯住两点:箭头样式 + 类里怎么用另一个类。
先看箭头,一眼分清关系类型
在标准UML类图中:
-
依赖关系:用带箭头的虚线表示,箭头从使用方(A)指向被使用者(B),比如
Person →<em>虚线</em>→ Book; -
关联关系:用带箭头的实线表示,箭头同样从拥有方(A)指向被拥有方(B),比如
Person —<em>实线</em>→ Address。
虚线 vs 实线,是类图上最直观的区分标志,比文字描述更可靠。
再看代码,确认关系落在哪一行
类图背后是代码写法,对照着看才不会空想:
- 如果类 A 中只有某个方法把 B 当作参数、局部变量或调用 B 的静态方法——这是依赖;
- 如果类 A 中声明了 B 类型的成员变量(比如
private Car car;),且这个变量长期存在、参与对象生命周期——这就是关联。
例如:public void drive(Car c) 是依赖;private Car myCar; 是关联。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
注意方向和多重性,避免单向误读
关联可以有方向性,也能标数量:
- 单向关联:A 知道 B(A 有 B 的字段),但 B 不知道 A;
- 双向关联:A 有 B 的字段,B 也有 A 的字段;
- 多重性标注如 “1”、“0..*” 写在连线两端,说明“一个 A 对应几个 B”,比如
Department 1 —— 0..* Employee表示一个部门可有零个或多个员工。
依赖一般不标多重性,因为它本身不持久、不结构化。
别混淆“用了”和“持有”
初学者常把“方法里 new 了一个对象”当成关联,其实不是:
-
void printReport() { PDFGenerator g = new PDFGenerator(); g.generate(); }—— 这是依赖,g 是临时局部变量; -
private PDFGenerator generator = new PDFGenerator();在类体里 —— 这是关联,generator 是对象的一部分。
核心判断依据就一个:那个 B 类型的东西,是不是作为 A 对象的“固定组成部分”存在。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










