方法基础

方法是组织代码的基本单元,本课学习Java中方法的定义和使用。

什么是方法

方法是一段完成特定功能的代码块,可以被重复调用。

方法的好处

好处 说明
代码复用 写一次,多次调用
逻辑清晰 把复杂问题分解成小方法
易于维护 修改只需改一处

方法定义

语法

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

示例:简单方法

JAVA
public class MethodDemo {
    // 定义方法
    public static void sayHello() {
        System.out.println("Hello, Java!");
    }
    
    public static void main(String[] args) {
        // 调用方法
        sayHello();
        sayHello();  // 可以多次调用
    }
}
▶ 试一试

输出:

TEXT
Hello, Java!
Hello, Java!

方法参数

参数让方法可以接收外部数据。

无参方法

JAVA
public static void printLine() {
    System.out.println("================");
}

有参方法

JAVA
public static void greet(String name) {
    System.out.println("Hello, " + name + "!");
}

多个参数

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

示例:方法参数

JAVA
public class ParamDemo {
    public static void greet(String name) {
        System.out.println("Hello, " + name + "!");
    }
    
    public static int add(int a, int b) {
        return a + b;
    }
    
    public static void printInfo(String name, int age) {
        System.out.println("姓名:" + name + ",年龄:" + age);
    }
    
    public static void main(String[] args) {
        greet("Alice");           // Hello, Alice!
        greet("Bob");             // Hello, Bob!
        
        int sum = add(3, 5);
        System.out.println("3 + 5 = " + sum);  // 8
        
        printInfo("张三", 25);   // 姓名:张三,年龄:25
    }
}
▶ 试一试

返回值

方法可以返回一个结果给调用者。

有返回值

JAVA
public static int max(int a, int b) {
    return (a > b) ? a : b;
}

无返回值(void)

JAVA
public static void printMax(int a, int b) {
    int max = (a > b) ? a : b;
    System.out.println("最大值:" + max);
}

示例:返回值

JAVA
public class ReturnDemo {
    public static int max(int a, int b) {
        return (a > b) ? a : b;
    }
    
    public static double average(int a, int b) {
        return (a + b) / 2.0;
    }
    
    public static boolean isEven(int num) {
        return num % 2 == 0;
    }
    
    public static void main(String[] args) {
        System.out.println("max(3, 5) = " + max(3, 5));       // 5
        System.out.println("avg(3, 5) = " + average(3, 5));   // 4.0
        System.out.println("isEven(4) = " + isEven(4));       // true
        System.out.println("isEven(7) = " + isEven(7));       // false
    }
}
▶ 试一试
⚠️ 注意: void方法不能使用return 值,但可以用return;提前结束方法。

方法重载

方法重载是指同一个类中,方法名相同但参数列表不同。

重载规则

规则 说明
方法名相同 必须一样
参数个数不同 可以
参数类型不同 可以
参数顺序不同 可以
返回类型不同 不算重载

示例:方法重载

JAVA
public class OverloadDemo {
    public static int add(int a, int b) {
        return a + b;
    }
    
    public static int add(int a, int b, int c) {
        return a + b + c;
    }
    
    public static double add(double a, double b) {
        return a + b;
    }
    
    public static String add(String a, String b) {
        return a + b;
    }
    
    public static void main(String[] args) {
        System.out.println(add(1, 2));              // 3
        System.out.println(add(1, 2, 3));           // 6
        System.out.println(add(1.5, 2.5));          // 4.0
        System.out.println(add("Hello", "World"));  // HelloWorld
    }
}
▶ 试一试

可变参数

可变参数允许方法接受不定数量的参数。

语法

JAVA
public static int sum(int... numbers) {
    int total = 0;
    for (int num : numbers) {
        total += num;
    }
    return total;
}

示例:可变参数

JAVA
public class VarargsDemo {
    public static int sum(int... numbers) {
        int total = 0;
        for (int num : numbers) {
            total += num;
        }
        return total;
    }
    
    public static void printNames(String... names) {
        for (String name : names) {
            System.out.println(name);
        }
    }
    
    public static void main(String[] args) {
        System.out.println(sum(1, 2));           // 3
        System.out.println(sum(1, 2, 3));        // 6
        System.out.println(sum(1, 2, 3, 4, 5));  // 15
        
        printNames("Alice", "Bob", "Charlie");
    }
}
▶ 试一试
⚠️ 注意: 可变参数必须是方法的最后一个参数,一个方法只能有一个可变参数。

参数传递

Java的参数传递是"值传递"。

基本类型传递

JAVA
public static void changeValue(int num) {
    num = 100;  // 只修改局部变量
}

public static void main(String[] args) {
    int x = 10;
    changeValue(x);
    System.out.println(x);  // 10,没有改变
}

引用类型传递

JAVA
public static void changeArray(int[] arr) {
    arr[0] = 100;  // 修改数组内容
}

public static void main(String[] args) {
    int[] arr = {1, 2, 3};
    changeArray(arr);
    System.out.println(arr[0]);  // 100,被修改了
}
💡 理解: 基本类型传递的是值的副本,引用类型传递的是地址的副本。

方法调用栈

方法调用时,会在栈内存中创建栈帧。

JAVA
public static void main(String[] args) {
    methodA();
}

public static void methodA() {
    methodB();
}

public static void methodB() {
    System.out.println("Hello");
}

调用顺序:main → methodA → methodB → 执行完毕 → 返回methodA → 返回main

❓ 常见问题

Q 方法和函数有什么区别?
A 在Java中,方法必须属于类。其他语言中独立的函数,在Java中都是类的静态方法。
Q 什么时候用静态方法?
A 当方法不需要访问对象的状态时,用静态方法。工具类的方法通常是静态的。
Q return可以省略吗?
A void方法可以省略return(会自动结束)。有返回值的方法必须有return。

📖 小节

📝 作业

  1. 方法练习: 编写方法计算两个数的最大值、最小值、平均值
  2. 重载练习: 编写多个print方法,支持不同类型参数
  3. 可变参数: 编写方法计算任意个数的平均值

下一课

下一课我们将学习 方法进阶,了解递归、静态方法和方法引用。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏