第一部分:方法基础概念

方法是完成特定功能的代码块,可提高复用性、可读性与可维护性

学习目标

  • 理解方法签名、形参、实参、返回值的概念
  • 掌握方法的执行流程
  • 区分无参、有参、无返回值、有返回值四种形态
调用者
方法签名
方法体
返回值

第二部分:方法定义与调用

1

基本语法结构

// 修饰符 返回类型 方法名(参数列表) { 方法体 }
public static int add(int a, int b) {
    int sum = a + b;
    return sum;
}
2

四种常见形态

形态示例特点
无参无返 void printLine() 仅执行操作
有参无返 void printSum(int x,int y) 依赖参数执行
无参有返 int getRandom() 返回计算结果
有参有返 int max(int a,int b) 最常用
3

调用示例

public static void main(String[] args) {
    int result = add(3, 5); // 实参 -> 形参
    System.out.println(result); // 8
}

第三部分:参数传递机制

Java 只有值传递:基本类型传递“数据值”,引用类型传递“地址值”

1

基本类型传值

static void change(int x) { x = 99; }

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

引用类型传“地址值”

static void modifyArray(int[] arr) { arr[0] = 999; }

public static void main(String[] args) {
    int[] nums = {1,2,3};
    modifyArray(nums);
    System.out.println(Arrays.toString(nums)); // [999,2,3]
}
3

可变参数 (varargs)

static int sumAll(int... nums) {
    int total = 0;
    for (int n : nums) total += n;
    return total;
}
// 调用:sumAll(1,2,3) 或 sumAll(new int[]{1,2})

第四部分:返回值与返回类型

1

单一返回

static double avg(int a, int b) {
    return (a + b) / 2.0;
}
2

多值返回(数组/对象)

static int[] minMax(int[] arr) {
    Arrays.sort(arr);
    return new int[]{arr[0], arr[arr.length-1]};
}
3

提前返回

static boolean isPrime(int n) {
    if (n < 2) return false;
    for (int i = 2; i <= Math.sqrt(n); i++) {
        if (n % i == 0) return false;
    }
    return true;
}

第五部分:方法重载 Overloading

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

1

重载示例

static int add(int a, int b) { return a + b; }
static double add(double a, double b) { return a + b; }
static int add(int a, int b, int c) { return a + b + c; }

第六部分:变量作用域与生命周期

局部变量

  • 定义在方法、代码块、形参列表内
  • 必须显式初始化
  • 方法调用时创建,执行结束即销毁

成员变量

  • 定义在类中、方法外
  • 有默认值
  • 随对象/类生命周期存在
public class ScopeDemo {
    int x = 10; // 成员变量
    void test(int y) { // y:形参局部变量
        int z = 20; // 局部变量
    }
}

第七部分:常见错误与调试

错误1:返回值缺失

static int abs(int x) {
    if (x >= 0) return x;
} // 编译错误:缺少return

错误2:参数顺序错误

static void setRange(int start, int end) {
    // 调用时写反:setRange(20,10)
}

错误3:无限递归

static int fact(int n) {
    return n * fact(n); // 缺少终止条件
}

第八部分:实战演练

项目:简易计算器

import java.util.Scanner;

public class Calculator {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("a="); double a = sc.nextDouble();
        System.out.print("b="); double b = sc.nextDouble();
        System.out.println("和: " + add(a,b));
        System.out.println("差: " + subtract(a,b));
        System.out.println("积: " + multiply(a,b));
        System.out.println("商: " + divide(a,b));
    }

    static double add(double x, double y) { return x + y; }
    static double subtract(double x, double y) { return x - y; }
    static double multiply(double x, double y) { return x * y; }
    static double divide(double x, double y) {
        if (y == 0) {
            System.out.println("除数不能为0");
            return Double.NaN;
        }
        return x / y;
    }
}

学习总结

  • 方法 = 功能 + 复用 + 可读
  • Java 只有值传递(地址值也是值)
  • 返回值必须与声明类型匹配
  • 重载只看参数列表,不看返回类型
  • 局部变量必须初始化且作用域最小