第三周、课前问题解答

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

static 方法

  • 属于类而非实例static 方法是与类本身关联的,而不是与类的具体实例关联。因此,它们可以在没有创建类的对象的情况下被调用。
  • 不能访问实例变量和实例方法static 方法只能访问其他 static 成员(变量和方法),不能访问实例成员。
  • 适用于
    • 工具方法:例如数学计算、常用的帮助方法等,这些方法通常不依赖于类的实例状态。
    • 工厂方法:用于创建类的实例,通常不需要依赖于实例的状态。
    • 常量值:例如,定义一些全局常量。

例子

public class MathUtils {
    public static int add(int a, int b) {
        return a + b;
    }
}

非 static 方法的特性

static 方法(实例方法):

  • 属于实例:这些方法需要通过类的实例来调用,并且可以访问实例变量和其他实例方法。
  • 访问实例状态:可以访问和修改类的实例变量和调用其他实例方法。
  • 适用于
    • 依赖于实例状态的方法:例如,修改或使用对象的属性值的方法。
    • 特定于对象的方法:那些与对象的具体状态和行为相关的方法。

例子

public class Student {
    private String name;
    
    public String getName() {
        return name;
    }
}

Student 类的 getName 方法是否应该用 static 修饰?

不应该。原因如下:

  1. 依赖于实例状态getName 方法访问的是 Student 对象的 name 实例变量,因此它依赖于具体的 Student 对象的状态。
  2. 实例方法访问实例变量getName 方法需要返回实例变量 name 的值,这是每个 Student 对象特有的。
  3. 与对象关联getName 方法的调用通常是针对某个特定的 Student 对象,因此需要实例化 Student 类来调用这个方法。

例子

public class Student {
    private String name;

    public Student(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

在这个例子中,getName 是一个实例方法,使用 static 修饰将是不合适的,因为它需要访问和返回特定实例的 name 属性值。

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

在购物车案例中,可以通过以下步骤将问题描述中的类、方法和属性找出来:

  1. 分析需求:首先,明确购物车系统的功能需求,比如添加商品、删除商品、查看总价等。这将帮助识别需要的主要功能和操作。

  2. 识别类:从功能需求中提取主要实体,比如“购物车”(Cart)、“商品”(Product)、“用户”(User)等,这些实体通常会成为类。

  3. 识别属性:确定每个类需要存储的数据。例如,“购物车”可能需要存储商品列表和总价,而“商品”可能需要存储名称、价格等信息。

  4. 识别方法:根据每个类的功能需求,定义类需要提供的方法。例如,“购物车”类需要有添加商品、删除商品、计算总价等方法。

举例说明:

  • Cart(购物车):管理商品的添加、删除和总价计算。
  • Product(商品):表示商品的基本信息。

属性

  • Cart 类:products(商品列表),totalPrice(总价)。
  • Product 类:name(商品名称),price(商品价格)。

方法

  • Cart 类:addProduct(Product product)(添加商品),removeProduct(Product product)(删除商品),calculateTotalPrice()(计算总价)。
  • Product 类:getName()(获取商品名称),getPrice()(获取商品价格)。

方法与属性属于哪个类的判定:

  • 属性:通常是类的成员变量,用于存储对象的状态或数据。
  • 方法:通常是类的操作功能,用于处理对象的行为或对数据进行操作。

判定时,可以通过以下标准:

  • 功能依赖:属性是数据的载体,方法是操作这些数据的功能。属性和方法通常根据其功能和数据关联来归属类。
  • 类的职责:类的职责决定了它包含的属性和方法。根据类的主要职责划分,将功能和数据组织到相关的类中。

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

 

为了避免类名冲突和有效管理项目中的类,可以采取以下策略:

  1. 使用包(Package)

    • 定义:将相关类组织到不同的包中,以便于区分和管理。
    • 示例:在Java中,可以将购物车系统中的类放在不同的包中,例如 com.example.cart 包中包含 Cart 类,而 com.example.product 包中包含 Product 类。
  2. 采用唯一的命名空间

    • 定义:在命名类时加入特定的前缀或后缀,确保类名具有唯一性。
    • 示例:如果你的公司是“TechCorp”,你可以将类命名为 TechCorpCart 或 TechCorpProduct
  3. 遵循一致的命名规范

    • 定义:制定并遵循统一的命名规范,以确保类名具有描述性且不容易与其他类冲突。
    • 示例:使用有意义的名称,如 ShoppingCart 代替 Cart,避免与其他可能的 Cart 类冲突。
  4. 模块化设计

    • 定义:将项目拆分为多个模块或子系统,每个模块负责不同的功能。
    • 示例:在一个大型电子商务项目中,将订单处理、用户管理和支付功能分别放在 orderuser, 和 payment 模块中。

示例

假设你的项目包括处理用户、订单和支付功能,你可以按以下方式组织:

  • 用户管理

    • 包:com.example.user
    • 类:UserManagerUserProfile
  • 订单处理

    • 包:com.example.order
    • 类:OrderProcessorOrderDetails
  • 支付功能

    • 包:com.example.payment
    • 类:PaymentGatewayTransactionRecord

这种组织结构有助于避免命名冲突,并使代码更易于维护和理解。

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

 

  1. 变量命名

    • 规范:变量名应使用小写字母,并采用驼峰命名法(camelCase)。如果变量名由多个单词组成,第二个及之后的单词首字母应大写。
    • 示例userNameorderId
  2. 类命名

    • 规范:类名应采用大写驼峰命名法(PascalCase),每个单词的首字母均应大写。
    • 示例UserManagerOrderProcessor
  3. 方法命名

    • 规范:方法名应使用小写驼峰命名法(camelCase),且方法名应清晰描述方法的功能。
    • 示例getUserName()processOrder()
  4. 常量命名

    • 规范:常量名应全部使用大写字母,单词之间使用下划线分隔。
    • 示例MAX_USER_COUNTDEFAULT_TIMEOUT
  5. 包命名

    • 规范:包名应全小写,且包名应按照组织或项目的逆向域名规则进行命名,以避免与其他包冲突。
    • 示例com.example.userorg.company.project.service
  6. 代码格式

    • 规范:每个类、方法的开头和结尾要有空行,保持代码的清晰和可读。每个代码块(如条件语句、循环等)应使用大括号,并在大括号前后留有空格。
      public void someMethod() {
          if (condition) {
              // Code block
          } else {
              // Code block
          }
      }
      

   7.OOP规约:

  • 规范:类应遵循单一职责原则,每个类应有明确的职责,避免将过多的功能集中在一个类中。方法应保持简洁,一个方法应仅完成一项任务。

示例:创建一个 UserManager 类来处理用户管理相关功能,而不是将用户管理、订单处理等功能混合在一起。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值