方法的重载
定义:当方法名称相同,参数的类型或个数不同时就称为方法重载。
通过程序分析,定义一个加法处理方法,该方法可以接受两个int变量,三个int变量,两个double变量的加法处理 采用加法重载。
public class JvaDemo{
public static void main(String args []){
int resultA = sum(10,20);//调用两个int参数的方法
int resultB = sum(10,20,30);//调用三个int参数的方法
double resultC = sum(10.2.20.3);
System.out.println("加法执行结果:"+ resultA);
System.out.println("加法执行结果:"+ resultB);
System.out.println("加法执行结果:"+ resultC);
}
public static int sum(int x,int y){
return x + y;
}
public static int sum(int x,int y,int z){
return x + y + z;
}
public static double sum(double x, double y){
return x + y;
}
}
这个时候可以发现同一个方法名称可以根据调用时传递的不同参数的类型或个数实现不同方法体的调用,就实现了方法重载的定义。
方法重载跟返回值的类型没有任何关系,它只跟参数有关系。但是在实际的开发中,请掌握一个基本的开发原则:只要是方法重载强烈建议其返回值类型相同。
观察一个代码:
public class JvaDemo{
public static void main(String args []){
System.out.println(1);
System.out.println(1.1);
System.out.println(true);
System.out.println('A');
System.out.println("HelloWorld");
}
}
可以发现,所有的输出操作支持有各种数据类型,所以System.out.println()本身就属于一个方法重载。
方法的递归调用(了解)
定义:指的是一个方法自己调用自己的情况。利用递归调用可以解决一些重复麻烦的问题。在进行方法递归调用时注意几个问题:
- 一定要设置方法递归调用的结束条件;
- 每一次调用过程之中一定要修改传递的参数条件。
public class JvaDemo{
public static void main(String args []){
int sum = 0;
int x = 1;
while(x <= 100){//循环的结束条件
sum += x;
x ++;//修改每一次循环的变量
}
System.out.println(sum);
}
public class JvaDemo{
public static void main(String args []){
System.out.println(sum(100));
}
public static int sum(int sum){//执行累加
if (num == 1){//不累加
}
return num + sum(num - 1);//递归调用
}
代码分析处理:
- 【第1次执行sum(),主方法执行】return 100 + sum (99);
- 【第2次执行sum(),sum()递归调用】return 99 + sum(98);
- …
- 【第99次执行sum(),sum()递归调用】return 2 + sum(1);
- 【第100次执行sum(),sum()递归调用】return 1 ;
整体形式:return 100 + 99 + 98 + …+ 2 + 1;
递归操作虽然可以简化调用,但是在写代码时很少有递归的情况,大部分情况下只有简单的逻辑处理,递归少用还有一个原因:可能会造成栈溢出。
计算“1! + 2!+ 3!+ 4!+ 5!+…+ 90!”
在进行阶乘计算的时候,必须考虑数据类型,肯定不能使用int或long,只能够使用double。
public class JvaDemo{
public static void main(String args []){
System.out.println(fan(90));
}
public static double sum(int num){
if (num == 1){
return 1;
}
return fan(num) + sum(num - 1);
}
public static double fan(int num){//执行累加
if (num == 1){//不累加
return 1;
}
return num + fan(num - 1);//递归调用
}
}
实际上都是可以用循环来完成的,但是如果使用递归要比循环结构看起来更加清晰一些。