方法(method)是一段可重复使用的代码,用来完成一个明确任务。你已经使用过很多内置方法(built-in method),例如 System.out.println()、String.length()、Math.max()。现在我们开始学习如何定义自己的方法。
定义方法
方法定义使用 returnType methodName。方法可以接收输入,也可以返回输出。括号里的 num1 和 num2 是参数(parameter),调用方法时传进去的 4、12 这类具体值叫实参(argument)。
public class Main {
static int larger(int num1, int num2) {
if (num1 > num2) {
return num1;
} else {
return num2;
}
}
public static void main(String[] args) {
System.out.println(larger(4, 12));
System.out.println(larger(54, 33));
}
}运行结果:
12
54return 的作用是把结果交回给调用者(caller)。方法执行到 return 后,本次方法调用就结束了。
知识测验
没有返回值的方法
有些方法只负责执行动作,不需要返回结果。例如打印一句问候语:
public class Main {
static void printGreeting(String name) {
System.out.println("Hello, " + name + "!");
}
public static void main(String[] args) {
printGreeting("Alice");
}
}返回类型为 void 的方法不返回结果;方法执行到末尾后,控制权直接回到调用位置。
方法调用
方法调用(method call)发生时,程序会暂时离开当前位置,进入被调用方法的方法体(method body)内部执行。方法结束后,程序再回到原来的位置继续执行。这个“进入与返回”的过程可以用调用栈(call stack)理解。
调用者 → 方法 → 返回值
解锁完整互动实验、进阶解析与精选参考答案。
下面的程序把“两点间距离”的计算拆成 distance() 和辅助方法 square()。一个方法可以调用另一个方法,把复杂计算分解成清晰的小步骤。
输入每个点时,用空格分隔两个坐标,例如 0 0。nextDouble() 会依次读取它们,也可以在两个数字之间换行。
import java.util.Scanner;
public class Main {
static double square(double value) {
return value * value;
}
static double distance(double x1, double y1, double x2, double y2) {
return Math.sqrt(square(x2 - x1) + square(y2 - y1));
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入第一个点,例如 0 0:");
double x1 = scanner.nextDouble();
double y1 = scanner.nextDouble();
System.out.print("请输入第二个点,例如 3 4:");
double x2 = scanner.nextDouble();
double y2 = scanner.nextDouble();
System.out.println("距离:" + distance(x1, y1, x2, y2));
}
}一次可能的运行结果:
请输入第一个点,例如 0 0:0 0
请输入第二个点,例如 3 4:3 4
距离:5.0嵌套调用:distance() 两次请求 square()
解锁完整互动实验、进阶解析与精选参考答案。
知识测验
main()
每个 Java 应用程序都从 main() 开始执行。同一个类中的其他静态方法可以声明在 main() 之前或之后。
public static void main(String[] args) {
System.out.println("程序开始");
}写一个计算绝对差的方法
编写 absoluteDifference(num1, num2),返回两个数差值的绝对值。
- 定义方法。
- 使用 if/else 返回非负差值。
- 至少打印两组调用结果。
写一个判断素数的方法
把素数判断封装进可复用的 isPrime(n)。
- n <= 1 时返回 false。
- 检查到 sqrt(n)。
- 在 main() 方法中读取并输出结果。
计算一年中的第几天
拆出 isLeap、daysInMonth 和 dayOfYear 三个方法。
- 实现闰年判断。
- 返回每个月天数。
- 让 dayOfYear 和 main 调用辅助方法。