Java【方法】,方法重载,方法递归,你都会了吗?


前言

📕各位读者好, 我是小陈, 这是我的个人主页
📗小陈还在持续努力学习编程, 努力通过博客输出所学知识
📘如果本篇对你有帮助, 烦请点赞关注支持一波, 感激不尽
📙 希望我的专栏能够帮助到你:
JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等
Java数据结构: 顺序表, 链表, 堆, 二叉树, 二叉搜索树, 哈希表等
JavaEE初阶: 多线程, 网络编程, TCP/IP协议, HTTP协议, Tomcat, Servlet, Linux, JVM等(正在持续更新)

上篇介绍了Java【逻辑控制语句】,本篇将继续介绍【方法】的相关内容,记录自己学习的进程的同时整理知识点分享给和我一样的初学者,希望能帮助到大家~


提示:是正在努力进步的小菜鸟一只,如有大佬发现文章欠佳之处还请多多指点~ 废话不多说,直接上干货!下面案例可供参考

一、方法的概念和使用?

1.什么是方法

方法就是一段代码块,学过C语言的小伙伴就可以理解为Java中的方法相当于C中的函数。方法存在的意义是:

  1. 是能够模块化的组织代码(当代码规模比较复杂的时候).
  2. 做到代码被重复使用, 一份代码可以在多个位置使用.
  3. 让代码更好理解更简单.
  4. 直接调用现有方法开发, 不必重复造轮子.

2.方法的调用

修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
return 返回值;
}

在这里插入图片描述
注意:
1、现阶段修饰符直接使用public static固定搭配
2、返回值类型必须与接收返回值的变量的类型一致(如图中的ret接收add函数返回值)
3、方法名用小驼峰命名格式,举例:
大驼峰:LoveYOU,小驼峰:loveYou
4、如果没有参数,可以不写,如果有,必须指定类型,多个参数逗号隔开
5、方法必须在类中定义,且不能嵌套定义
6、自定义方法和main方法谁在上谁在下都无所谓、java中没有方法声明这一说

3.形参与实参的关系(重要)

例如,交换 a 和 b 的值:
在这里插入图片描述
我们发现实际上 a 和 b 的值并没有被交换。

先来了解一下什么是实参,什么是形参:
上述代码中,在 main 方法中定义变量 a、b 的时候,为 a、b 分配了内存空间,而调用 swap 方法时,将 a 、 b 传给 swap 方法,用 x、y 接收 a、 b,实际上又为x、y分配了内存空间,将a、b的值分别赋给x、y
调用 swap 方法结束之后,整个swap的栈帧空间(内存)会被回收,包括x ,y 的内存。

总结:
传递给方法的 a 、b就是实参,而在 swap 方法中的 x 、y 就是形式参数。
所以形参只是实参的临时拷贝
形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。

话在说回来,为什么a、b没有被调换成功呢?
就是因为形参只是实参的临时拷贝
swap 方法中,确实调换成功了,把 x、y 成功调换了,但和 a、b 没有任何关系。

那如何解决呢?暂时先不讲,先主要理解形参和实参的关系即可。

二、方法的重载

1.什么是方法的重载

在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。
例如:
在这里插入图片描述
可以看到,定义了三个方法:两个整形求和,两个浮点型求和,三个浮点型求和,这三个方法名都是add,这就是方法重载。

有几点需要注意:

  1. 方法名必须相同
  2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
  3. 与返回值类型是否相同无关
  4. 编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法

2.为什么要方法重载

原因显而易见

就比如我要写一个求两个整形的和的方法,但这个方法并不适用与浮点型,如果我的参数是浮点型,就必须再写一个求两个浮点型相加的方法,那如果我有三个参数呢?又需要重新写…

仅仅针对 “求和” 这个事,我有什么样的需求就要写什么样的方法,但取名是个问题,为了提高敲代码效率和可读性,诞生出了方法重载

三、方法的递归

1.什么是方法的递归

在讲递归之前,大家一定都听过这样一个故事:
从前,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的就是:
从前,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的就是:
从前,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的就是:
…反正就是,用通俗易懂的词概括就是套娃

递归是什么?
程序自己调用自己的过程,且把一个复杂的问题转化成比较简单,且解决原理相同的问题求解

递归的思想就是:
有些时候,我们遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问题有相同的解法,等子问题解决之后,原问题就迎刃而解了。


例如:
要求 5 的阶乘:可以转化成 5 * 4 的阶乘
要求 4 的阶乘:可以转化成 4 * 3 的阶乘
要求 3 的阶乘:可以转化成 3 * 2 的阶乘

我们把 5 的阶乘,转化成求 5 * 4 的阶乘,就是把大的问题转化成简单且原理相同的小问题。

要想理解递归,首先就得知道方法是如何调用、执行的
方法结束以后,回到调用此方法的位置继续执行还未执行的代码

下图是代码 + 解析:
(n=3)
在这里插入图片描述
这里提醒大家,递归还要有两个条件:
1、
满足终止条件时停止递归
(如上图的(n == 1))
2、
每一次递归都更加靠近终止条件

递归必须满足这两个条件,否则会死递归导致栈溢出

2.斐波那契数列

在这里插入图片描述
在这里插入图片描述

所以,递归也是有缺陷的,有些情况下尽管可以使用递归解决,但并不合适。

并且递归能干的事情,for循环可以干,但for循环可以干的事情,递归不一定能干,需要随着对代码的理解,视情况而定使用哪一种方式解决问题。

而递归的牛X之处就在于:合适的情况下可以用极少的代码解决问题。


总结

以上就是今天要讲的关于【方法】的内容,主要介绍了方法的定义和使用,方法的重载,方法的嵌套,这些你掌握了吗~

如果本篇对你有帮助,请点赞收藏支持一下,小手一抖就是对作者莫大的鼓励啦~


上山总比下山辛苦
下篇文章见

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灵魂相契的树

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值