Java中方法的重载以及方法的递归

方法重载机制

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);
    }
    
}

递归内存图分析:

image-20210729235342122

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值