方法
2026/9/12大约 4 分钟
方法
本篇整理 Java 方法的概念与定义格式、方法重载以及递归的基本用法。
1. 问题引入
先看一段程序:
public static void main(String[] args) {
int sum = 0;
for(int i = 1; i <= 10; i++) {
sum += i;
}
System.out.println(sum);
...
...
...
sum = 0;
for(int i = 1; i <= 20; i++) {
sum += i;
}
System.out.println(sum);
...
...
...
sum = 0;
for(int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);
}上面的程序中,多次用到了 1+2+3+...+n 这个功能,每次实现都要重复地写这部分代码,这样程序会变得很臃肿,可读性也非常差。
为了解决代码重复编写的问题,我们可以把 1+2+3+...+n 这个功能抽取出来,放在一个 {} 中,并为这段代码起个名字,每次使用时通过这个名字来使用就可以了。
上述过程中,所提取出来的代码可以被看作是程序中定义的一个方法,程序在需要时调用该方法即可。
2. 方法定义
2.1 什么是方法
方法就是完成特定功能的代码块(代码片段)。
在很多语言里面都有函数的定义,函数在 Java 中被称为方法。
2.2 如何定义方法
定义格式如下:
修饰符 返回值类型 方法名(参数类型 参数名1, 参数类型 参数名2…) {
函数体;
return 返回值;
}各组成部分的含义如下:
| 组成部分 | 含义 |
|---|---|
| 修饰符 | 目前统一使用 public static,更多的修饰符后面会详细介绍 |
| 返回值类型 | 用于限定返回值的数据类型;如果没有返回值,返回值类型为 void |
| 方法名 | 方法的名字,方便调用方法,要符合标识符的命名规范,见名知意 |
| 参数类型 | 限定调用方法时传入参数的数据类型 |
| 参数名 | 接收调用方法时传入的参数,要符合标识符的命名规范,见名知意 |
| 方法体 | 完成功能的代码 |
| return | 结束方法,以及返回方法指定类型的值 |
| 返回值 | 被 return 带回的结果,返回给调用者 |
返回值类型为 void 时,return 语句有如下两种写法:
return;;- 可以不写
return语句。
public class MyTest1 {
//定义方法
//求两个数的和
public static int sum(int a, int b) {
//int sum = a + b;
//return sum;
return a + b;
}
//定义方法
//求1+2+3+...+n
public static int sumn(int n) {
int sum = 0;
for(int i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
//定义方法
//输出m行,每行打印n个*
//没有返回值,返回值类型为void
public static void printStar(int m, int n) {
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
System.out.print("*");
}
System.out.println();
}
//没有返回值,可以不写return语句
//return;
}
public static void main(String[] args) {
//方法调用
//打印5行,每行打印8个*
printStar(5, 8);
//方法调用
//求10和5的和
int s = sum(10, 5);
System.out.println("10 + 5 = " + s);
//方法调用
//求1+2+3+...+10
int s1 = sumn(10);
System.out.println("1 + 2 + 3 + ... + 10 = " + s1);
}
}3. 方法重载
方法重载(Overload)指在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
方法重载的特点:
- 与返回值类型无关,只看方法名和参数列表;
- 在调用时,JVM 通过参数列表的不同来区分同名方法。
public class MyTest1 {
//定义方法
//求两个数的和
public static int sum(int a, int b) {
//int sum = a + b;
//return sum;
return a + b;
}
//定义方法
//求三个数的和
public static int sum(int a, int b, int c) {
//int sum = a + b;
//return sum;
return a + b + c;
}
public static void main(String[] args) {
//方法调用,求两个数的和
System.out.println(sum(1, 2));
//方法调用,求三个数的和
System.out.println(sum(1, 2, 3));
}
}4. 递归
递归是指方法调用方法本身。
注意
递归必须有明确的退出条件,否则会无限递归下去。
/*
斐波那契数列 1, 1, 2, 3, 5
f(n) = f(n - 1) + f(n - 2)
f(1) = 1
f(2) = 1
求斐波那契数列第n个数的值
*/
public class MyTest2 {
public static int f(int n) {
if(n == 1) {
return 1;
}
if(n == 2) {
return 1;
}
return f(n - 1) + f(n - 2);
}
public static void main(String[] args) {
int num = f(5);
System.out.println(num);
}
}