上午(2.5h)方法核心语法 + 原理

1. 方法完整格式(必须背)

java

运行

修饰符  返回值类型  方法名(参数列表) {
    方法体;
    return 返回值;
}

今天固定写:

java

运行

public static ...

2. 无参无返回值方法

java

运行

public class MethodDemo {
    // 无参无返回值:只做事,不接收、不返回
    public static void printHello() {
        System.out.println("Hello Method");
    }

    // 打印分割线
    public static void printLine() {
        System.out.println("========================");
    }

    public static void main(String[] args) {
        // 调用方法
        printHello();
        printLine();
    }
}

知识点

  • void:没有返回值
  • 调用直接写方法名 ()
  • 方法必须在类里,且调用写在 main 里

3. 有参有返回值方法(高频)

① 求和

java

运行

public static int add(int a, int b) {
    return a + b; // 返回结果
}
  • int:返回整数
  • return 必须有,且类型匹配

② 判断奇偶数

java

运行

public static boolean isOdd(int num) {
    return num % 2 != 0;
}

③ 求圆面积

java

运行

public static double getCircleArea(double r) {
    return 3.14 * r * r;
}

④ 求数组最大值(数组作为参数)

java

运行

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

调用示例

java

运行

public static void main(String[] args) {
    int sum = add(10, 20);
    System.out.println(sum); // 30

    int[] arr = {1,3,5};
    int max = getMax(arr);
}

知识点

  • 有形参:(int a,int b)
  • 实参:调用时传的真实数据 add(10,20)
  • 有返回值就必须 return
  • void 可以不写 return,或写 return;

4. 参数传递机制(面试必考)

① 基本类型:值传递(副本)

java

运行

public static void change(int a) {
    a = 100; // 只改副本
}

public static void main(String[] args) {
    int num = 10;
    change(num);
    System.out.println(num); // 10 不变
}

② 引用类型(数组):地址传递

java

运行

public static void changeArr(int[] arr) {
    arr[0] = 100; // 改原数组
}

public static void main(String[] args) {
    int[] arr = {1,2,3};
    changeArr(arr);
    System.out.println(arr[0]); // 100 变了
}

核心结论

  • 基本类型:方法内改不影响外面
  • 数组 / 对象:方法内改会影响原数据
  • 原因:数组传递的是地址

下午(3h)方法重载 + 递归 + 封装

1. 方法重载 Overload(三要素)

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

java

运行

// 1. 两个int
public static int add(int a, int b) {
    return a + b;
}

// 2. 两个double → 重载
public static double add(double a, double b) {
    return a + b;
}

// 3. 三个int → 重载
public static int add(int a, int b, int c) {
    return a + b + c;
}

// 4. int+double → 重载
public static double add(int a, double b) {
    return a + b;
}

不是重载的例子

java

运行

// 只改返回值 → 不是重载
public static double add(int a,int b) {}

// 只改参数名 → 不是重载
public static int add(int x,int y) {}

知识点

  • 重载让同一个方法名能处理不同类型 / 个数
  • 编译器靠参数匹配自动找对应方法

2. 递归入门(自己调用自己)

① 阶乘 n!

java

运行

public static int factorial(int n) {
    if (n == 1) return 1; // 出口
    return n * factorial(n - 1);
}
  • factorial(5) = 54321

② 1~n 和

java

运行

public static int sum(int n) {
    if (n == 1) return 1;
    return n + sum(n - 1);
}

③ 斐波那契第 n 项

java

运行

public static int fib(int n) {
    if (n == 1 || n == 2) return 1;
    return fib(n - 1) + fib(n - 2);
}

知识点

  • 必须有出口,否则 StackOverflowError
  • 递归 = 方法栈不断入栈

3. 数组工具类封装(企业风格)

java

运行

public class ArrayUtil {

    // 遍历
    public static void printArr(int[] arr) {
        for (int num : arr) System.out.print(num + " ");
    }

    // 最大值
    public static int max(int[] arr) {
        int m = arr[0];
        for (int num : arr) if (num > m) m = num;
        return m;
    }

    // 冒泡排序
    public static void sort(int[] arr) {
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-1-i; j++) {
                if (arr[j] > arr[j+1]) {
                    int t = arr[j]; arr[j]=arr[j+1]; arr[j+1]=t;
                }
            }
        }
    }

    // 反转
    public static void reverse(int[] arr) {
        int i=0,j=arr.length-1;
        while(i<j){
            int t=arr[i]; arr[i]=arr[j]; arr[j]=t;
            i++;j--;
        }
    }
}

调用

java

运行

int[] arr = {3,1,4,2};
ArrayUtil.sort(arr);
ArrayUtil.printArr(arr);

晚上(1.5h)综合实战题(完整可运行)

1. 成绩等级方法

java

运行

public static char getLevel(int score) {
    if (score >= 90) return 'A';
    if (score >= 80) return 'B';
    if (score >= 60) return 'C';
    return 'D';
}

2. 数组最大值方法

java

运行

public static int findMax(int[] arr) {
    int max = arr[0];
    for (int num : arr) {
        if (num > max) max = num;
    }
    return max;
}

3. 3 组重载求和

java

运行

add(int,int)
add(double,double)
add(int,int,int)

4. 递归 1~n 求和

java

运行

public static int sumN(int n) {
    if(n==1) return 1;
    return n + sumN(n-1);
}

5. 完整工具类 ArrayUtil

上面已经写好,直接用。


Day5 核心知识点总复习(面试必问)

  1. 方法:复用代码、模块化
  2. void:无返回值
  3. return:结束方法并返回结果
  4. 值传递:基本类型,不影响外部
  5. 地址传递:数组,会影响原数组
  6. 重载:同名不同参
  7. 递归:自己调用自己,必须有出口
  8. 工具类:把通用功能封装,方便反复调用

知识点:

  • 计算机是二进制
  • 0.10.14 这种十进制小数二进制里是无限循环小数
  • 只能存近似值,存不完整
  • 所以算出来会差一点点

这不是你的错,是double 类型天生的小瑕疵


3. 怎么解决?(两种最常用方法)

方法 1:输出时保留两位小数(最简单,最推荐)

java

运行

double area = getCircleArea(3);
System.out.printf("%.2f", area);

输出:

plaintext

28.26

方法 2:用 String 格式化

java

运行

String result = String.format("%.2f", area);
System.out.println(result);

输出:

plaintext

28.26

2.像 for while if这类控制语句如果后面只有一行循环体/条件体后面的大括号可以省略

3.方法括号里只能放值或变量,不能定义变量!

4.关于传递:基本类型:方法内改不影响外面数组 / 对象:方法内改会影响原数据原因:数组传递的是地址

  • 基本类型 = 传复印件 → 改复印件不影响原件
  • 数组 / 对象 = 传地址 → 改的就是同一个东西

拓展:

斐波那契数列,简单说就是:

从第三个数开始,每个数 = 前两个数相加

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐