方法
2024/12/19大约 3 分钟
方法
一、问题引入
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.1、什么是方法
简单的说:方法就是完成特定功能的代码块(代码片段)
在很多语言里面都有函数的定义,函数在Java中被称为方法
2.2、如何定义方法
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
函数体;
return 返回值;
}
修饰符比较多,后面会详细介绍。目前统一使用
public static
方法名,一个名字,为了方便我们调用方法,要符合标识符的命名规范,见名知意
参数类型,限定调用方法时传入参数的数据类型
参数名,接收调用方法时传入的参数,要符合标识符的命名规范,见名知意
方法体,完成功能的代码
return,结束方法以及返回方法指定类型的值
返回值类型,用于限定返回值的数据类型。如果没有返回值,返回值类型为
void
,此时return
语句有如下两种写法:
return;
- 可以不写
return
语句返回值,程序被
return
带回的结果,返回给调用者
public class MyTest1 {
//定义方法
//求两个数的和
public static int sum(int a, int b) {
//int sum = a + b;
//return sum;
retun 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 = " + s);
}
}
三、方法重载
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
特点:
- 与返回值类型无关,只看方法名和参数列表
- 在调用时,JVM通过参数列表的不同来区分同名方法
public class MyTest1 {
//定义方法
//求两个数的和
public static int sum(int a, int b) {
//int sum = a + b;
//return sum;
retun a + b;
}
//定义方法
//求三个数的和
public static int sum(int a, int b, int c) {
//int sum = a + b;
//return sum;
retun a + b + c;
}
public static void main(String[] args) {
//方法调用,求两个数的和
System.out.println(sum(1, 2));
//方法调用,求三个数的和
System.out.println(sum(1, 2, 3));
}
}
四、递归
定义:方法调用方法本身
注意:要有明确的退出条件
/*
斐波那契数列 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);
}
}