方法的重载
定义
重载就是在一个类中,有相同的函数名称,但是形参不同的函数
规则
- 方法名必须相同
- 参数列表必须不同(个数不同,类型不同,参数排列顺序不同)
- 方法的返回类型也可以相同,也可以不同
- 仅仅返回类型不同不足以成为方法的重载
实现理论
方法名称相同是,编译器会根据调用方法的参数个数、参数类型去逐个匹配,以选择对应的方法,如果匹配失败,则编译器会报错
可变参量
特点
从jdk5开始,Java支持传递同类型的可变参数给一个方法。
在方法声明中,在指定参数类型后加一个省略号(…)
一个方法中只能一个可变参量,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明
下面是一个简单的应用
import java.util.Scanner;
public class Dome04 {
public static void main(String[] args) {
Scanner scanner= new Scanner(System.in);
System.out.println("请输入四个数");
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = scanner.nextInt();
int d = scanner.nextInt();
Dome04 dome04 = new Dome04();
dome04.test(a,b,c,d);
}
public void test(int... i ){
System.out.println(i[0]);
System.out.println(i[1]);
System.out.println(i[3]);
System.out.println(i[2]);
}
}
递归
定义
简单说就是自己调用自己
利用递归可以用最简单的程序来解决一些复杂的问题,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题,递归策略只要少量的程序就可描述出解题过程所需要的多次重复计算,大大的减少了程序的代码量。递归的能力在用于用有限的语句来定义对象的无限集合
递归头
什么时候不调用自身方法,如果没有头,将会陷入死循环
递归体
什么时候需要调整自身方法
使用递归来解决求阶乘问题
import java.util.Scanner;
public class Dome05 {
public static void main(String[] args) {
Dome05 dome05 = new Dome05();
Scanner scanner= new Scanner(System.in);
System.out.println("你想要计算几的阶乘");
int a= scanner.nextInt();
System.out.println(f(a));
}
public static int f(int n){
if (n==1){
return 1;
}
else {
return n*f(n-1);
}
}
}
其实递归本质上和for循环差不多,不过一个是我们自己定义的方法,一个是Java自带的语法体系