1.方法的概念与使用
1.1 什么是方法
方法就是一个代码片段. 类似于 C 语言中的 "函数"。方法存在的意义:
1. 是能够模块化的组织代码(当代码规模比较复杂的时候).
2. 做到代码被重复使用, 一份代码可以在多个位置使用.
3. 让代码更好理解更简单.
4. 直接调用现有方法开发.
1.2 方法格式
// 方法定义
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
return 返回值;
}
public class Method{
// 方法的定义
public static int add(int x, int y) {
return x + y;
}
}
方法调用的执行过程:
调用方法--->传递参数--->找到方法地址--->执行被调方法的方法体--->被调方法结束返回--->回到主调方法继续往下 执行
方法的返回值是可选的. 有些时候可以没有的,没有时返回值类型必须写成void
2.实参和形参
Java中方法的形参就相当于sum函数中的自变量n,用来接收sum函数在调用时传递的值的。形参的名字可以随意 取,对方法都没有任何影响,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。
public static int add(int a,int b){ // a,b是形参
return a + b;
}
add(1,2);//1和2是实参,在方法调用时,形参a,b用来保存1,2
在Java中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体
对于基础类型来说, 形参相当于实参的拷贝. 即 传值调用
3.方法重载
1.方法重载的概念
Java方法的重载(Overloading)是指在同一个类中,可以有多个方法名相同但参数列表不同的方法。重载方法可以有不同的返回类型,但不能只有返回类型不同而参数列表相同。
重载方法的特点包括:
- 方法名相同但参数列表不同:参数列表包括参数的数量、类型和顺序。
- 返回类型可以不同:重载方法可以有不同的返回类型。
- 方法的重载和方法的参数名称无关,只与参数列表相关。
- 方法的重载可以提高代码的可读性和可维护性。
例如,以下是一个重载方法的示例:
public class Text{
// 重载方法1:接受一个整数参数
public void process(int num) {
// 执行逻辑
}
// 重载方法2:接受一个字符串参数
public void process(String str) {
// 执行逻辑
}
// 重载方法3:接受两个整数参数
public void process(int num1, int num2) {
// 执行逻辑
}
}
上述示例中,定义了三个方法,它们的方法名相同但参数列表不同,分别接受一个整数参数、一个字符串参数和两个整数参数。这三个方法构成了方法的重载。
在调用重载的方法时,编译器会根据传递的参数的数量和类型来确定调用哪个方法。如果找不到匹配的重载方法,则会报编译错误。
重载方法的选择规则如下:
- 如果有完全匹配的方法,则调用该方法。
- 如果没有完全匹配的方法,则寻找参数类型可自动转换成目标类型的方法。
- 如果有多个方法可以自动转换参数类型,则选择具有最精确匹配参数类型的方法。
- 如果有多个方法匹配度相同,则会报编译错误,要求明确指定调用的方法。
需要注意的是,方法的重载只与参数列表相关,与方法的返回类型、访问修饰符或抛出的异常类型等无关。重载方法不需要在方法名后面添加任何标志来区分。
4.递归
Java递归是指在一个方法中调用自身的过程。递归是一种常见的解决问题的方法,特别适用于问题可以分解为相同类型的子问题的情况。
在Java中,递归函数通常包含以下几个元素:
-
基本情况(Base Case):递归函数中必须包含基本情况,即递归终止的条件。当满足基本情况时,递归函数将不会再调用自身,以避免无限递归。
-
递归调用:在递归函数中,需要调用自身来处理子问题。每次递归调用都会将问题规模减小,直到最终达到基本情况。
-
递归返回:递归函数需要返回值,以将子问题的解合并为整个问题的解。在每次递归调用后,需要将子问题的解合并,然后返回给上一层的递归调用。
以下是一个简单的递归函数的例子,用来计算一个正整数的阶乘:
public static void main(String[] args) {
int n = 5;
int ret = factor(n);
System.out.println("ret = " + ret);
}
public static int factor(int n) {
System.out.println("函数开始, n = " + n);
if (n == 1) {
System.out.println("函数结束, n = 1 ret = 1");
return 1;
}
int ret = n * factor(n - 1);
System.out.println("函数结束, n = " + n + " ret = " + ret);
return ret;
}
在上面的例子中,factor
方法计算一个正整数n的阶乘。当n等于0或1时,函数返回1,这是基本情况。否则,函数将递归调用自身,计算n-1的阶乘,并将结果与n相乘得到结果。最终将结果返回给上一层的递归调用。在main
方法中,我们使用factor
方法来计算5的阶乘,并将结果打印出来。
需要注意的是,在使用递归时必须注意递归的终止条件,以避免无限递归的问题。同时,递归的性能可能较差,因为它需要不断地进行函数调用和栈的操作。在实际应用中,需要谨慎使用递归,并确保它能够有效解决问题。