Java 方法

更新于 2025-12-25

Jakob Jenkov 2015-03-03

Java 方法是你在 Java 代码中对数据(变量)执行操作的地方。换句话说,你将 Java 操作(代码)组织在 Java 方法内部。Java 方法必须位于 Java 类 内部。

Java 方法类似于其他编程语言(如 Pascal 或 JavaScript)中的函数或过程。方法是一组对某些数据执行某种操作的 Java 语句,可能返回结果,也可能不返回。

下面是一个简单的 Java 方法示例:

public class MyClass {
    public void writeText(String text) {
        System.out.print(text); // 将 text 参数打印到 System.out。
    }
}

上面的示例在一个名为 MyClass 的类中定义了一个名为 writeText 的方法。该方法接受一个名为 text 的参数,并在方法体内的 Java 语句中使用该参数。此方法不返回任何值。

在接下来的章节中,我将解释上述方法定义中每个元素的含义。


方法参数

方法参数使得可以向方法传递值,以便方法对其进行操作。方法参数在方法名后的括号内声明。在下面的示例中,方法参数以粗体标出:

public void writeText(String text1, String text2) {
    System.out.print(text1);
    System.out.print(text2);
}

上面示例中的 writeText 方法接受两个名为 text1text2 的参数。这两个参数的类型都是 String,这由每个参数名前的类型声明指定。

你可以使用任意基本数据类型或内置 Java 类作为参数的数据类型,也可以使用你自己定义的类作为参数类型。


参数 vs. 变量

方法参数与变量类似。你可以读取其值,也可以修改其值。以下是一个读取并修改参数值的方法示例:

public class MyClass {
    public void writeText(String text1, String text2) {
        System.out.print(text1); // 读取 text1 参数的值
        System.out.print(text2); // 读取 text2 参数的值
        text1 = "new value 1";   // 修改 text1 的值
        text2 = "new value 2";   // 修改 text2 的值
    }
}

需要注意的是:虽然可以修改参数的值,但应谨慎这样做,因为它可能导致代码难以理解。如果你认为自己能处理好,那就继续;否则,建议创建一个局部变量来保存该值,而保持参数不变。

调用 writeText() 方法的方式如下:

MyClass myClassObj = new MyClass();
myClassObj.writeText("Hello", "World");

注意方法调用时,参数写在方法名后的括号内。执行上述代码时,writeText() 方法会被调用,其参数将分别包含 "Hello""World"


final 参数

Java 方法参数可以像变量一样被声明为 finalfinal 参数的值不能被更改。也就是说,如果参数是对某个对象的引用,则该引用不能被重新赋值,但对象内部的值仍然可以被修改。示例如下:

public void writeText(final String text1, final String text2) {
    System.out.print(text1); // 读取 text1 参数的值
    System.out.print(text2); // 读取 text2 参数的值
}

在此方法示例中,你不能将 text1text2 重新赋值为其他 String 对象。


局部变量

你可以在方法内部声明局部变量。局部变量的使用方式与其他变量相同,但只能在该方法的作用域内访问。示例如下:

public void writeText() {
    int localVariable1 = 1;
    int localVariable2 = 2;
    System.out.println(localVariable1 + localVariable2);
}

局部变量也可以被声明为 final。如果将局部变量声明为 final,则其值不能被更改。如果该变量是对某个对象的引用,则引用不能更改,但所引用对象内部的值仍可修改。


方法返回类型

Java 方法可以返回一个值。示例如下:

public int sum(int value1, int value2) {
    return value1 + value2;
}

该方法将传入的两个参数相加并返回结果。

首先注意返回类型 int,它在方法名(sum)之前以粗体标出,表示该方法返回一个 int 类型的值。

其次注意 return 语句,它决定了方法返回的具体值。

你可以从 Java 方法中返回任意基本类型或任意对象。例如,也可以返回一个 String

public String concat(String string1, String string2) {
    return string1 + string2;
}

该方法将作为参数传入的两个字符串拼接后返回结果。


多个 return 语句

一个方法中可以有多个 return 语句,但它们不能同时被执行。一旦执行了某个 return 语句,该方法中后续的代码将不再执行,程序会立即返回到调用该方法的位置。

以下是一个包含多个 return 语句的方法示例:

public String concat(String string1, String string2, boolean reverseOrder) {
    if (reverseOrder) {
        return string2 + string1;
    }
    return string1 + string2;
}

注意方法中的 if 语句,它判断布尔参数 reverseOrdertrue 还是 false

  • 如果 reverseOrdertrue,方法将按反向顺序(先 string2,再 string1)拼接并返回;
  • 如果为 false,则跳过 if 语句体,执行第二个 return 语句,按正常顺序(先 string1,再 string2)返回。

方法访问修饰符

你可能已经注意到,本文所有方法声明前都带有 public 关键字。这个关键字就是方法的访问修饰符,用于控制哪些代码可以调用该方法。关于访问修饰符的更多细节,请参阅 Java 访问修饰符 一文。


异常声明

如果方法内部发生错误,该方法可能会抛出异常。异常必须在方法声明中声明,如下所示(以粗体标出):

public String concat(String string1, String string2) throws MyException {
    if (string1 == null) {
        throw new MyException("string1 was null");
    }
    if (string2 == null) {
        throw new MyException("string2 was null");
    }
    return string1 + string2;
}

该方法首先检查两个参数 string1string2 是否为 null。如果是,则抛出异常。

当异常被抛出时,方法会立即停止执行。但与普通 return 不同的是,程序不会返回到调用位置,而是跳转到包围该方法调用的第一个匹配的 catch() { } 块中继续执行。


调用方法

本文多处提到了“调用方法”,现在我们来看看具体如何操作。请看以下两个方法:

public void callSum() {
    int theSum = add(1, 3);
    System.out.print(theSum);
}

public int add(int value1, int value2) {
    return value1 + value2;
}

注意 callSum() 方法如何创建一个名为 theSum 的变量,并将其赋值为 add(1, 3) 方法调用的返回值,然后打印该值。

是不是很巧妙?

方法可用于将代码分解为更小、更易理解且可重用的代码段,而不是将整个程序写成一个庞大的方法。