第03周 预习、实验与作业:面向对象入门2与类的识别

1.什么样的方法应该用static修饰?不用static修饰的方法往往具有什么特性?Student的getName应该用static修饰吗?

【1】用static修饰的方法称为静态方法,工具类方法、工厂方法、访问/操作静态变量的方法、辅助性静态方法等几种方法适合用static修饰。
【2】不用static修饰的方法称为非静态方法,主要特征有:依赖实例状态、必须通过实例调用、支持继承与重写、隐含this关键字。
【3】不应该用static修饰Student类的getName方法。
因为getName方法的作用是获取某个具体学生实例的姓名(比如Student类的非静态成员变量name),完全依赖实例的状态,符合非静态方法的核心特征,而与static方法“属于类、不依赖实例”的特性完全冲突。

2.购物车案例中,使用了什么方法将问题描述中的类、方法、属性找出来?方法与属性到底属于哪个类,要怎么判定呢?

【1】
第一步:识别核心实体(类)
从场景中找出“有独立意义、需被描述和操作”的主体,通常是名词或名词短语。
比如:用户(User)、购物车(ShoppingCart)、商品(Product)。
第二步:为每个类分配属性(固有特征)
属性是描述类“是什么”的静态信息,通常是形容词或名词(如“名字”“价格”),需满足“属于该类的专属特征”。
比如:
User:用户的固有特征→userId(用户ID)、username(用户名)、phone(手机号)。
Product:商品的固有特征→id(商品编号)、name(商品名)、price(单价)、stock(库存)。
第三步:为每个类分配方法(专属行为)
方法是描述类“能做什么”的动态操作,通常是动词或动词短语,需满足“该操作由该类发起、依赖该类的属性”。
比如:
Product:商品的行为→checkStock(int buyNum)(校验库存是否足够)。
User:用户的行为→getShoppingCart()(获取用户的购物车)、checkout(ShoppingCart cart)(结算购物车)。
【2】
归属原则1:“谁的特征”→ 属性归属
判断属性属于哪个类,看这个属性是“描述哪个实体的固有特征”,离开该实体是否无意义。
归属原则2:“谁的行为”→ 方法归属

  • 方法操作的是哪个类的属性?
    若方法需要修改/访问某个类的属性(尤其是非静态属性),则该方法大概率属于这个类。
  • 方法的发起者是谁?
    若方法是“某个实体主动做的事”,则属于这个实体。

归属原则3:“单一职责”→ 避免类臃肿

每个类只负责“自己的属性和行为”,不承担其他类的职责,即一个方法只做“与当前类相关的一件事”。

3.一个项目中有很多类。怎样才能避免你项目中的类与别人编写的类同名呢?项目中类各种各样要怎么管理这些代码呢?举例说明。

  • 避免类同名:靠“反向域名+模块”的包名做唯一标识,用“包名+类名”区分同名类;

  • 管理代码:按“功能模块+代码分层”组织包结构,配合命名规范和Git工具,让代码清晰、可维护。

4.阅读《阿里巴巴Java开发手册 终极版(1.3.0)》,写出至少7条Java编程规范。应包含如下几个方面:(变量命名、类命名、方法命名、常量命名、包命名、代码格式、OOP规约。)

【1】变量命名规范:
成员变量、局部变量均采用小驼峰命名法,即首字母小写,后续单词首字母大写,且禁止使用拼音或英文混合命名。例如: userName、yonghuminguserMing
【2】类命名规范:
类名采用大驼峰命名法,即每个单词首字母大写,且类名需体现业务含义,避免无意义命名。例如: UserService、ServiceuserService
【3】方法命名规范:
方法名采用小驼峰命名法,且需符合“动词+名词”的语义结构,清晰表达方法功能。例如:getUserName(获取用户名)、saveOrder(保存订单),userNameGetorder
【4】常量命名规范:
常量(static final修饰)采用全大写+下划线分隔的命名方式,且常量需放在类的顶部,集中管理。例如:MAX_ORDER_NUM(最大订单数)、maxOrderNumMaxOrderNum
【5】包命名规范:
包名采用全小写字母,以公司/组织域名倒序为前缀,后续按“业务模块/功能”分层,避免与其他项目包名冲突。
例如:com.alibaba.ecommerce.order(阿里巴巴电商项目的订单模块)、com.OrderAlibaba.Ecommerce
【6】代码格式规范:
代码块的左大括号({)需紧跟语句末尾,不单独换行;右大括号(})需单独换行,且与对应语句的缩进对齐。
例如:
正确示例:
if (user != null) { // 左大括号紧跟条件 
System.out.println(user.getName()); 
} // 右大括号单独换行,与if对齐

错误示例:
if (user != null) 
{ //左大括号单独换行
System.out.println(user.getName()); 

 
【7】OOP规约:
实体类(如User、Order)的成员变量需用private修饰,禁止直接暴露,必须通过getter/setter方法访问,且setter方法返回值需为void,禁止返回this以避免链式调用带来的风险。
例如:
正确示例:
private String userName; // 正确的getter/setter 
public String getUserName() { 
return userName; 

public void setUserName(String userName) { 
this.userName = userName; 

错误示例:
(setter返回this)
public User setUserName(String userName) {
this.userName = userName;
return this; // 禁止
}

posted @ 2025-09-21 23:30  呼儿嘿哟。  阅读(11)  评论(0)    收藏  举报