Skip to content

Java 方法与函数

方法(Method)是一段可重用的代码块,它执行一个特定的任务。方法也被称为函数(Function)。将代码组织成方法可以提高代码的可读性、可维护性,并实现代码复用。

什么是方法?

在面向对象的编程中,方法定义了对象的行为。例如,一个 Calculator 对象可能有一个 add() 方法来执行加法运算。

定义方法

一个完整的方法定义包括:

  • 修饰符 (Modifier): 如 public, staticpublic 表示该方法可以被任何类访问。static 表示该方法属于类本身,而不是类的某个特定对象。
  • 返回类型 (Return Type): 方法执行完毕后返回的数据的类型。如果方法不返回任何值,使用 void
  • 方法名 (Method Name): 方法的名称,遵循驼峰命名法(camelCase)。
  • 参数列表 (Parameter List): 在括号内声明的变量列表,用于接收调用时传递给方法的值。如果方法不需要参数,括号内留空。
  • 方法体 (Method Body): 包含在花括号 {} 内的具体代码。

语法:

java
modifier returnType methodName(parameter1Type parameter1Name, ...) {
    // 方法体
    // ...
    return value; // 如果返回类型不是 void
}

示例:

java
public class Calculator {
    // 定义一个加法方法
    // public: 修饰符
    // int: 返回类型
    // add: 方法名
    // (int a, int b): 参数列表
    public int add(int a, int b) {
        int sum = a + b;
        return sum; // 返回计算结果
    }

    // 定义一个不返回任何值的方法
    public void printWelcomeMessage() {
        System.out.println("欢迎使用计算器!");
    }
}

调用方法

要执行一个方法,你需要“调用”它。

  • 如果是实例方法(没有 static 关键字),你需要先创建类的对象,然后通过对象调用。
  • 如果是静态方法(有 static 关键字),你可以直接通过类名调用。
java
public class Main {
    public static void main(String[] args) {
        // 调用实例方法
        Calculator myCalculator = new Calculator(); // 创建对象
        myCalculator.printWelcomeMessage(); // 通过对象调用 void 方法

        int result = myCalculator.add(10, 20); // 调用带返回值的方法
        System.out.println("10 + 20 = " + result); // 输出: 30

        // 调用静态方法 (例如 Math.max)
        int maxNumber = Math.max(5, 8); // 直接通过类名调用
        System.out.println("最大值是: " + maxNumber);
    }
}

参数 (Parameters) vs. 实参 (Arguments)

  • 参数 (Parameter): 在方法定义中声明的变量,如 add(int a, int b) 中的 ab
  • 实参 (Argument): 在调用方法时传递给方法的实际值,如 myCalculator.add(10, 20) 中的 1020

方法重载 (Method Overloading)

方法重载允许在一个类中定义多个同名的方法,只要它们的参数列表不同(参数的数量、类型或顺序不同)。编译器会根据您传递的实参来决定调用哪个版本的方法。

java
public class Greeter {
    public void sayHello() {
        System.out.println("Hello!");
    }

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

    public void sayHello(String name, int times) {
        for (int i = 0; i < times; i++) {
            System.out.println("Hello, " + name + "!");
        }
    }
}

static 关键字

  • 静态方法 (static method): 属于类本身,不依赖于任何对象实例。可以直接通过类名调用。main 方法就是一个典型的静态方法。
  • 实例方法 (Instance method): 属于类的对象。必须通过类的实例来调用。它可以访问该对象的实例变量。

Java 的值传递 (Pass-by-Value)

这是一个非常重要的概念:Java 总是按值传递参数的

  • 对于基本类型: 方法接收的是实参值的一个副本。在方法内修改参数,不会影响到原始的实参变量。

    java
    public void changeValue(int x) {
        x = 20; // 修改的是副本 x
    }
    int original = 10;
    changeValue(original); // 传递的是 10 这个值的副本
    // original 的值仍然是 10
  • 对于引用类型 (对象): 方法接收的是对象引用的一个副本。这个副本和原始引用指向堆内存中同一个对象。因此,如果在方法内部通过这个引用副本修改了对象的状态(即对象的实例变量),这个修改是会反映到原始对象上的。但是,如果在方法内让参数引用指向一个新对象,原始的引用不会受影响。

    java
    class MyData { int value; }
    
    public void changeObject(MyData data) {
        data.value = 99; // 修改了堆中同一个对象的内容
    }
    
    MyData myData = new MyData();
    myData.value = 1;
    changeObject(myData); // 传递的是引用的副本,但指向同一个对象
    // myData.value 现在是 99

本站内容仅供学习和研究使用。