45. Java 类和对象 - 方法定义与实现规范

149 阅读4分钟

45. Java 类和对象 - 方法定义与实现规范


一、方法的核心概念

首先,我们要明确:什么是方法? 在Java的面向对象编程中,方法承担着四个核心职责:

1️⃣ 封装特定功能逻辑:方法是实现功能的最小单元,比如数据计算、数据库操作等。 2️⃣ 接收输入参数并返回处理结果:通过参数接收外部数据,并通过返回值输出计算结果。 3️⃣ 通过访问修饰符控制可见性:用publicprivate等修饰符限制方法的访问范围。 4️⃣ 实现代码复用和多态特性:同一个方法名可以通过重载实现不同逻辑,也可以通过重写实现动态绑定。

思考一下:你上次写的方法是否明确了它的职责?是否承担了过多任务?


二、方法声明完整结构

接下来,让我们一起来看一段标准的Java方法声明:

[修饰符] 返回类型 方法名([参数列表]) [throws 异常列表] {
// 方法体
[return 返回值;]
}

这段语法包含六大核心要素:

要素说明示例
修饰符控制访问权限与方法特性public static synchronized
返回类型指定返回值类型或voiddouble/List<String>
方法名遵循小驼峰命名法,动词开头calculateRevenue
参数列表类型+名称的声明组合(String id, int quantity)
异常列表声明可能抛出的受检异常throws IOException
方法体包含执行逻辑的代码块{ return x * y; }

📌 案例

public int add(int a, int b) {
  return a + b;
}
  • public 是访问修饰符
  • int 是返回类型
  • add 是方法名
  • (int a, int b) 是参数列表
  • return a + b; 是方法体

大家可以回忆一下自己写过的方法,是否涵盖了这些要素?有没有遗漏的部分?🤔


三、返回类型规范

在Java方法中,返回类型的选择非常重要。我们来看看常见返回类型的分类和使用场景:

类型使用场景示例注意事项
原始类型简单数值计算int calculateSum(...)注意自动装箱/拆箱问题
对象类型复杂数据返回Employee getById(...)避免返回null,推荐Optional
void执行操作无返回值void saveRecord(...)可添加void断言
泛型类型需要类型安全的数据结构List<T> filter(...)保持类型参数一致性

🌟 最佳实践:避免返回null,推荐使用Optional

示例:

public Optional<Account> findAccount(String id) {
  return Optional.ofNullable(account);
}
  • 如果account为空,会返回Optional.empty(),从而避免NullPointerException

四、参数处理规范

在方法设计中,参数列表也有明确的规范:

1️⃣ 参数数量:一般不超过5个,参数过多可以考虑封装成对象。 2️⃣ 参数顺序:从主要到次要排列,比如先必填参数,后可选参数。 3️⃣ 参数校验:方法内部要有前置检查,防止非法数据进入。

来看一个简单的参数校验示例:

public LocalDate createDate(int year, int month, int day) {
  if (year < 1900 || year > 2100) {
  throw new IllegalArgumentException("无效年份");
}
  if (month < 1 || month > 12) {
  throw new IllegalArgumentException("无效月份");
}
  return LocalDate.of(year, month, day);
}

五、异常声明规范

Java方法的异常处理主要分为受检异常非受检异常

异常类型声明要求处理建议
受检异常必须throws声明明确处理或向上传递
非受检异常无需声明添加文档说明

示例代码:

/**
 * @throws FileNotFoundException 当配置文件不存在时抛出
 * @throws IllegalArgumentException 输入参数非法时抛出
 */
public Configuration loadConfig(String path) throws FileNotFoundException {
  if (path == null) {
  throw new IllegalArgumentException("路径不能为null");
}
// 加载配置文件逻辑
}

六、方法设计最佳实践

最后,我们总结几条高效的方法设计原则:

1️⃣ 单一职责原则:一个方法只做一件事。 2️⃣ 命名规范:遵循小驼峰命名法,保持方法名与功能一致。 3️⃣ 控制方法长度:建议不超过50行代码。 4️⃣ 降低圈复杂度:避免多重嵌套条件,方法复杂度要可控。

示例:

优化前:

public void processOrder(Order order) {
    if (order != null) {
        if (order.isValid()) {
            // 20行处理逻辑...
            if (paymentService.checkBalance()) {
                // 15行支付逻辑...
            }
        }
    }
}

优化后:

public void processOrder(Order order) {
  validateOrder(order);
  executePayment(order);
  updateInventory(order);
}

private void validateOrder(Order order) { ... }
private void executePayment(Order order) { ... }
private void updateInventory(Order order) { ... }