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



    前言

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

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


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

    一、方法的概念和使用?

    1.什么是方法

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

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

    2.方法的调用

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

    在这里插入图片描述
    注意:
    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之处就在于:合适的情况下可以用极少的代码解决问题。


    总结

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

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


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

  • 相关阅读:
    Serverless入门
    【面试经典150 | 位运算】数字范围按位与
    css中filter属性设置后导致页面定位失效
    STM32 Cubemx Freertos 工程, 用GDB进行debug时候, 跳进HardFault_Handler的问题
    用timerfd_*系列函数代替alarm作为定时器选项
    Web前端开发技术课程大作业,期末考试HTML+CSS+JavaScript电竞游戏介绍网站
    无碳越障S型小车总体设计(lunwen+工序卡+过程卡+cad图纸+proe三维图纸+运动仿真视频)
    【漏洞复现-spring-目录遍历】vulfocus/spring-cve_2020_5410
    springboot server.address 配置问题
    数据结构和算法(链表结构、栈、队列、递归行为、哈希表和有序表)(2)
  • 原文地址:https://blog.csdn.net/yzhcjl_/article/details/127637801