思维导图:
2.6.1 什么是方法
### 2.6.1 什么是方法
**定义**:
- 方法就是一段可以重复调用的代码,使得程序的可读性、可维护性都得以提高。
**示例**:
- 假设有一个游戏中需要反复发射炮弹。而发射炮弹的代码有100行。为了避免在程序中多次写下这100行代码,可以将它们抽取成一个方法,然后在需要的地方调用此方法。
**注意事项**:
- 有些资料中也会将“方法”称为“函数”。
**Java中的方法语法**:
修饰符 返回值类型 方法名(参数类型 参数名1, 参数类型 参数名2, ... ) {
// 执行语句
return 返回值;
}
**具体说明**:
- **修饰符**: 控制方法的访问权限、是否为静态等属性。具体内容会在后续学习中介绍。
- **返回值类型**: 定义方法返回的数据类型。
- **参数类型** 和 **参数名**: 定义调用方法时传入的数据类型和接收传入数据的变量。
- **return 关键字**: 用于返回指定类型的值并结束方法。
如果方法声明的返回值类型是 `void`,表示该方法不返回任何值,此时,可以不写 `return` 语句。
**示例代码**:
public class Example19 {
public static void main(String[] args) {
printRectangle(3,5);
printRectangle(2,4);
printRectangle(6,10);
}
public static void printRectangle(int height, int width) {
for(int i = 0; i < height; i++) {
for(int j = 0; j < width; j++) {
System.out.print("*");
}
System.out.print("\n");
}
}
}
在上述示例中,`printRectangle` 是一个方法,它接受两个参数 `height` 和 `width` 来打印相应大小的矩形。`main` 方法中则调用了 `printRectangle` 三次,分别打印了不同大小的矩形。
**运行结果**:
该程序会打印三个矩形,大小分别为3行5列、2行4列和6行10列。
---
以上是对2.6.1节内容的笔记整理。
2.6.2 方法的重载
**2.6.2 方法的重载**
**概念:** 方法重载指的是在同一作用域内,方法名相同,但参数个数或参数类型不同的方法。需要注意的是,重载与方法的返回值无关,也就是说,仅仅返回值不同的方法并不构成重载。
**实际应用:** 例如在现实生活中,一个班级里可能有多个同名的学生,但我们可以通过其他信息(如他们的身高、体重或住址等)来区分他们。在编程中,我们可以通过方法的参数类型和数量来区分重载的方法。
**案例:** 文件2-22 `Example21.java`
public class Example21 {
public static void main(String[] args) {
int sum1 = add(1, 2);
int sum2 = add(1, 2, 3);
double sum3 = add(1.2, 2.3);
System.out.println("sum1=" + sum1);
System.out.println("sum2=" + sum2);
System.out.println("sum3=" + sum3);
}
public static int add(int x, int y) {
return x + y;
}
public static int add(int x, int y, int z) {
return x + y + z;
}
public static double add(double x, double y) {
return x + y;
}
}
**说明:** 从上述代码中可以看出,在`Example21`类中定义了三个`add`方法:
1. 两个整数相加
2. 三个整数相加
3. 两个浮点数相加
尽管这些方法的名字都是`add`,但由于它们接受的参数个数或类型不同,因此这些方法都是有效的,并且是重载的方法。当在`main`方法中调用这些`add`方法时,Java会根据传递给方法的参数数量和类型来确定应该调用哪一个方法。
**运行结果:**
sum1=3
sum2=6
sum3=3.5
**结论:** 方法重载提供了一种方式,让程序员可以使用相同的方法名,但为不同的数据类型或参数个数定义不同的方法实现,这增加了代码的可读性和重用性。
总结:
**Java 中的方法**涉及很多内容,下面我将总结一些重点、难点、易错点及使用技巧:
### 1. **重点**:
- **定义和调用**:理解如何定义一个方法(包括返回类型、方法名、参数列表)以及如何正确调用它。
- **参数传递**:区分值传递与引用传递。
- **返回值**:理解何时返回值,以及如何处理返回的值。
- **方法重载**:同一个类中可以定义多个名字相同但参数列表不同的方法。
- **递归**:方法调用自身。
### 2. **难点**:
- **递归**:理解递归并能够正确实现可以是具有挑战性的。要特别注意递归的终止条件。
- **可变参数**:理解如何使用和处理可变参数 `...`。
- **方法参数的传递机制**:对于初学者来说,Java中的值传递与引用传递可能会引起混淆。
### 3. **易错点**:
- **返回值的遗漏**:声明了返回值但是方法体中忘记返回或者返回了错误的类型。
- **递归无终止条件**:导致堆栈溢出错误。
- **方法重载与参数列表**:错误地认为方法重载只与返回值类型有关,而实际上它与参数列表有关。
- **参数传递混淆**:错误地期望基本数据类型像对象一样按引用传递。
### 4. **使用技巧**:
- **代码重用**:定义和使用方法可以避免重复代码,提高代码的可读性和可维护性。
- **单一职责**:尽量保证每个方法只做一件事,这样它们更容易理解和测试。
- **清晰命名**:方法的名称应清晰地表达它的功能。
- **利用方法重载**:可以为不同的参数类型或数量提供相同的方法名,增加代码的清晰性。
- **适当的注释**:对于复杂的、非直观的或特定目的的方法,添加注释来解释它的工作原理和用途。