方法重载机制
1、以下程序先不使用方法重载机制,分析程序的缺点???
不用方法重载的缺点(两个):
第一个:代码不美观(不好看)。【这是次要的】
第二个:程序员需要记忆更多的方法名称,程序员比较累
使用方法重载机制。解决之前的两个缺点
优点1:代码整齐美观
优点2:功能相似的,可以让方法名相同,更易于以后的代码编写
在Java语言中,是怎么进行方法区分的呢?
首先Java编译器会通过方法名进行区分
但是在Java语言中允许方法名相同的情况出现
如果方法名相同的情况下,编译器会通过方法参数类型进行方法的区分。
方法重载(overload):
什么时候需要考虑方法重载?
在同一个类当中,如果“功能1”和”功能2“它们的功能是相似的,
那么可以考虑将它们的方法名一致,这样代码既美观,又便于后期
代码编写(容易记忆,方便使用)
注意:方法重载overload不能随便使用,如果两个功能压根不相干,不相似,根本没关系,此时两个方法使用重载机制的话,会导致编码更麻烦。无法进行方法功能的区分
什么时候代码会发生方法重载?
条件1:在同一个类当中
条件2:方法名相同
条件3:参数列表不同
参数的个数不同算不同!!!
参数的类型不同算不同!!!
参数的顺序不同算不同!!!
只要同时满足以上3个条件,那么我们可以认定方法和方法之间发生了重载机制
注意:
1、不管代码怎么写,最终一定能让Java编译器很好的区分开这两个方法。
2、不在同一个类当中,不能叫做方法重载。
3、方法重载和方法的返回值类型无关。
方法递归
1.什么是方法递归?
方法自己调用自己,这就是方法递归
2.当递归程序没有结束条件,一定会发生:
栈内存溢出错误:StackOverflowError
所以:递归必须要有结束条件。(这是一个非常重要的知识点)
JVM发生错误之后只有一个结果,就是退出JVM。
3.递归假设是有结束条件的,就一定不会发生栈内存溢出错误吗?
假设这个结束条件是对的,是合法的,递归有的时候也会出现栈内存溢出错误。因为有可能递归的太深,栈内存不够了。因为一直在压栈。
4.在实际的开发中,不建议轻易的选择递归,能用for循环while循环代替的尽量使用循环来做。因为循环的效率高,耗费的内存少。递归耗费的内存比较大,另外递归的使用不当,会导致JVM死掉
(但在极少数的情况下,不用递归,这个程序没法实现)
所以递归我们还是要认真学习滴!
5.在实际的开发中,假设有一天你真正的遇到了:StackOverflowError 你怎么解决这个问题,可以谈一下你的思路吗?
我来谈一下我的个人思路:
首先第一步:先检查递归的结束条件对不对。如果递归结束条件不对,必须对条件进一步修改,直到正确为止。
第二步:假设递归条件没问题,怎么办?
这个时候需要手动的调整JVM的栈内存初始化大小。可以将栈内存的空间调大点。(可以调整大一些)
第三步:如果运行时还是出现这个错误,没办法,只能继续扩大栈的内存大小。
public class RecursionTest{
public static void main(String[] args){
doSom();
}
public static void doSome(){
System.out.println("doSome method execute!");
//调用方法:doSome()既然是一个方法,那么doSome方法可以调用吗?
doSome();
System.out.println("doSome over")
}
}
用递归编写程序,计算1~n的和
public class RecursionTest03{
public static void main(String[] args){
//1~3的和
int n = 3;
int r = sum(n);
System.out.println(r);
}
public static int sum(int n ){
if(n == 1){
return 1;
}
return n + sum(n-1);
}
}
递归内存图分析: