03作业
一、关于static修饰符的问题
-
适合用static修饰的方法:
- 工具类方法(如Math类的abs()、StringUtils的isEmpty())
- 工厂方法(用于创建对象的方法)
- 单例模式的getInstance()方法
- 与类本身相关而非实例相关的操作
-
不使用static修饰的方法特性:
- 属于对象实例,需要创建对象后才能调用
- 可以访问实例变量和实例方法
- 具有this指针,指向当前对象
- 与对象的状态紧密相关
-
Student的getName()不应该用static修饰,因为getName()是获取具体学生对象的姓名,每个学生对象有不同的姓名,属于实例级别的操作。
二、购物车案例中的类设计问题
-
识别类、方法、属性的方法:
- 从问题描述中提取名词(可能作为类或属性)
- 提取动词(可能作为方法)
- 根据业务逻辑分析实体间的关系
-
判定方法与属性所属类的原则:
- 谁拥有这个数据,属性就属于谁
- 谁执行这个操作,方法就属于谁
- 遵循"高内聚"原则,相关的属性和方法应该放在同一个类中
例如:购物车(Cart)有添加商品的方法,因为购物车"拥有"添加商品这个行为;商品(Product)有价格属性,因为价格是商品的固有特征。
三、类名冲突与代码管理
-
避免类名冲突的方法:
- 使用包(package)机制,通过不同的包结构区分
- 采用公司域名反转作为包的前缀(如com.alibaba.service)
- 在类名前添加项目或模块前缀(如OrderService、UserService)
-
代码管理方式:
- 按功能模块划分包(如controller、service、dao)
- 按业务领域划分包(如user、order、product)
- 使用Maven/Gradle等构建工具进行依赖管理
- 采用模块化开发,将大型项目拆分为多个子模块
举例:一个电商项目可以这样组织包结构:
com.company.ecommerceuser // 用户相关order // 订单相关product // 商品相关cart // 购物车相关common // 公共类util // 工具类
四、《阿里巴巴Java开发手册》中的规范
-
变量命名:
- 成员变量、局部变量命名采用lowerCamelCase风格,必须遵从驼峰形式。
- 定义DO/DTO/VO等POJO类时,不要使用isXXX作为布尔类型变量的前缀。
-
类命名:
- 类名使用UpperCamelCase风格,必须遵从驼峰形式并首字母大写。
- 抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾。
-
方法命名:
- 方法名使用lowerCamelCase风格,必须遵从驼峰形式。
- 获取单个对象的方法用get作前缀,获取多个对象的方法用list作前缀。
-
常量命名:
- 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚。
- 不允许出现任何魔法值(即未经定义的常量)直接出现在代码中。
-
包命名:
- 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。
- 包名建议使用域名反转形式,如com.alibaba.xxx。
-
代码格式:
- 左大括号前不换行,左大括号后换行。
- 注释的双斜线与注释内容之间有且仅有一个空格。
- 单行字符数限制不超过120个,超出需要换行。
-
OOP规约:
- 避免通过一个类的对象引用访问此类的静态变量或静态方法。
- 所有的覆写方法,必须加@Override注解。
- 构造方法禁止加入任何业务逻辑,如果有初始化逻辑,请放在init方法中。