各位读者好, 我是小陈, 这是我的个人主页
小陈还在持续努力学习编程, 努力通过博客输出所学知识
如果本篇对你有帮助, 烦请点赞关注支持一波, 感激不尽
希望我的专栏能够帮助到你:
JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等
Java数据结构: 顺序表, 链表, 堆, 二叉树, 二叉搜索树, 哈希表等
JavaEE初阶: 多线程, 网络编程, TCP/IP协议, HTTP协议, Tomcat, Servlet, Linux, JVM等(正在持续更新)
上篇介绍了Java【逻辑控制语句】,本篇将继续介绍【方法】的相关内容,记录自己学习的进程的同时整理知识点分享给和我一样的初学者,希望能帮助到大家~
提示:是正在努力进步的小菜鸟一只,如有大佬发现文章欠佳之处还请多多指点~ 废话不多说,直接上干货!下面案例可供参考
方法就是一段代码块,学过C语言的小伙伴就可以理解为Java中的方法相当于C中的函数。方法存在的意义是:
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
return 返回值;
}
注意:
1、现阶段修饰符直接使用public static固定搭配
2、返回值类型必须与接收返回值的变量的类型一致(如图中的ret接收add函数返回值)
3、方法名用小驼峰命名格式,举例:
大驼峰:LoveYOU,小驼峰:loveYou
4、如果没有参数,可以不写,如果有,必须指定类型,多个参数逗号隔开
5、方法必须在类中定义,且不能嵌套定义
6、自定义方法和main方法谁在上谁在下都无所谓、java中没有方法声明这一说
例如,交换 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 没有任何关系。
那如何解决呢?暂时先不讲,先主要理解形参和实参的关系即可。
在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。
例如:
可以看到,定义了三个方法:两个整形求和,两个浮点型求和,三个浮点型求和,这三个方法名都是add,这就是方法重载。
有几点需要注意:
原因显而易见
就比如我要写一个求两个整形的和的方法,但这个方法并不适用与浮点型,如果我的参数是浮点型,就必须再写一个求两个浮点型相加的方法,那如果我有三个参数呢?又需要重新写…
仅仅针对 “求和” 这个事,我有什么样的需求就要写什么样的方法,但取名是个问题,为了提高敲代码效率和可读性,诞生出了方法重载
在讲递归之前,大家一定都听过这样一个故事:
从前,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的就是:
从前,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的就是:
从前,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,讲的就是:
…反正就是,用通俗易懂的词概括就是套娃
递归是什么?
程序自己调用自己的过程,且把一个复杂的问题转化成比较简单,且解决原理相同的问题求解
递归的思想就是:
有些时候,我们遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问题有相同的解法,等子问题解决之后,原问题就迎刃而解了。
例如:
要求 5 的阶乘:可以转化成 5 * 4 的阶乘
要求 4 的阶乘:可以转化成 4 * 3 的阶乘
要求 3 的阶乘:可以转化成 3 * 2 的阶乘
…
我们把 5 的阶乘,转化成求 5 * 4 的阶乘,就是把大的问题转化成简单且原理相同的小问题。
要想理解递归,首先就得知道方法是如何调用、执行的
方法结束以后,回到调用此方法的位置继续执行还未执行的代码
下图是代码 + 解析:
(n=3)
这里提醒大家,递归还要有两个条件:
1、
满足终止条件时停止递归
(如上图的(n == 1))
2、
每一次递归都更加靠近终止条件
递归必须满足这两个条件,否则会死递归导致栈溢出
所以,递归也是有缺陷的,有些情况下尽管可以使用递归解决,但并不合适。
并且递归能干的事情,for循环可以干,但for循环可以干的事情,递归不一定能干,需要随着对代码的理解,视情况而定使用哪一种方式解决问题。
而递归的牛X之处就在于:合适的情况下可以用极少的代码解决问题。
以上就是今天要讲的关于【方法】的内容,主要介绍了方法的定义和使用,方法的重载,方法的嵌套,这些你掌握了吗~
如果本篇对你有帮助,请点赞收藏支持一下,小手一抖就是对作者莫大的鼓励啦~
上山总比下山辛苦
下篇文章见