Skip to content

03-方法与数组

对应原始资料:day04-方法day08-数组

一、方法

1. 方法的定义与调用

方法是把一段代码打包起来,提高复用性。

java
public static 返回值类型 方法名(参数列表) {
    // 方法体
    return 结果;   // void 时可省略,或写 return;
}

示例:

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

调用:int sum = add(3, 5);

2. 方法的重载(Overload)

同一个类中,方法名相同、参数列表不同(个数、类型、顺序不同),与返回值无关。

java
public static int sum(int a, int b) { return a + b; }
public static int sum(int a, int b, int c) { return a + b + c; }
public static double sum(double a, double b) { return a + b; }

3. 方法的参数传递机制

  • 基本类型作为参数:传递的是数据值的副本,方法内修改不影响外部。
  • 引用类型(数组、对象)作为参数:传递的是地址值,方法内通过地址修改元素会影响外部。
java
public static void change(int[] arr) { arr[0] = 100; }

int[] arr = {1, 2, 3};
change(arr);
System.out.println(arr[0]);   // 100

4. 方法的递归

方法自己调用自己,必须有出口,否则栈溢出。

java
// 求 n!
public static int factorial(int n) {
    if (n == 1) return 1;        // 出口
    return n * factorial(n - 1);
}

二、数组

1. 数组的定义

数组是存储同一种类型多个元素的容器,长度固定。

java
// 静态初始化
int[] arr1 = {1, 2, 3};
int[] arr2 = new int[]{1, 2, 3};

// 动态初始化(默认值:int=0, double=0.0, boolean=false, 引用=null)
int[] arr3 = new int[5];

2. 数组的访问

  • 索引从 0 开始,范围 [0, length - 1]
  • 越界访问会抛出 ArrayIndexOutOfBoundsException

3. 数组的遍历

java
int[] arr = {11, 22, 33, 44};
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

4. 数组的常见操作

求最大值:

java
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
    if (arr[i] > max) max = arr[i];
}

遍历求和、求平均:

java
int sum = 0;
for (int x : arr) sum += x;
double avg = (double) sum / arr.length;

统计个数:如统计数组中能被 3 整除的元素个数。

5. 数组的内存图(理解)

区域存放
栈 Stack方法运行、局部变量
堆 Heapnew 出来的内容(数组、对象)
  • int[] arr = new int[3];:栈中的 arr 变量保存堆中数组的地址
  • 两个变量指向同一个数组时,一个修改会影响另一个。

6. 二维数组

java
int[][] arr = {{1, 2}, {3, 4, 5}, {6, 7, 8, 9}};
for (int i = 0; i < arr.length; i++) {          // 行
    for (int j = 0; j < arr[i].length; j++) {   // 列
        System.out.print(arr[i][j] + " ");
    }
    System.out.println();
}

7. 经典案例:动漫美女拼图

原始资料 day09-动漫美女拼图 是一个数组 + 随机打乱 + GUI 的小项目,可作为综合练习。

练习建议

  1. 写方法:判断一个数是不是素数、是不是闰年。
  2. 用方法重载实现多种求和。
  3. 数组求最大值、最小值、反转。
  4. 实现冒泡排序(进阶版见 02 模块)。
  5. 二维数组打印杨辉三角。