Java程序中方法的用法重载和递归

 更新时间:2021年10月25日 15:26:36   作者:波风张三  
Java语言中的“方法”在其他语言当中也可能被称为“函数”(Function)。对于一些复杂的代码逻辑,如果希望重复使用这些代码,并且做到“随时任意使用”,那么就可以将这些代码放在一个大括号“{}”当中,并且起一个名字。使用代码的时候,直接找到名字调用即可

前言

“方法”又被称为“函数”,其他的编程语言也有这个概念,重要性不言而喻,在这个文章,将介绍如何定义和使用方法。

一、方法的基本用法

1.什么是方法

在Java中,方法定义在类中,它和类的成员属性(数据成员)一起构建一个完整的类。构成方法有四大类——返回值类型、方法名称、参数、方法体。

方法就像一个功能,当我们需要用到的时候,就去调用它,不用的时候就放到一边。

也可以说它是一本工具书,当我们需要查看的时候,我们就会去找这本书查资料,不用的时候就放在书柜里面。

2.方法的基本定义

//方法定义
public static 方法返回值 方法名称([参数类型 形参 …]){
方法体代码;
[return 返回值];
}
// 方法调用
返回值变量 = 方法名称(实参…);

可以看出,方法包含一个方法头和一个方法体。

返回值类型:指定了方法返回的数据类型。它可以是任意有效的类型,包括构造类型(类就是一种构造类型)。如果方法没有返回值,则其返回类型必须是void。方法体中的返回值类型要与方法头中定义的返回值类型一致。

public class TestDemo {

    public static void main(String[] args) {
        int a = 10;
        int b = 20;

// 方法的调用
        int ret = add(a, b);
        System.out.println("ret = " + ret);
    }
// 方法的定义
    public static int add(int x, int y) {
        return x + y;
    }
}

在这里插入图片描述

3.方法调用的执行过程

  •  定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行.
  • 当方法被调用的时候, 会将实参赋值给形参.
  • 参数传递完毕后, 就会执行到方法体代码.
  • 当方法执行完毕之后(遇到 return 语句), 就执行完毕, 回到方法调用位置继续往下执行.
  • 一个方法可以被多次调用

4.方法中的实参和形参

形参:

在定义一个方法时,参数列表中的参数个数至少为1个。

实参:

调用方法时,需要调用者提供与原方法定义相匹配的参数(类型、数量、顺序都一致)

在这里插入图片描述

那么形参与实参的关系又是怎样的呢?

  • 形参变量隶属于方法体,也就是说它们是方法的局部变量,只有在被调用的时候才被创建,才被临时性分配内存,在调用结束后,立即释放所分配的内存单元。也就是说,当方法调用返回后,就不能再使用这些参数了。
  • 在调用方法时,实参和形参在数量上、类型上、顺序上应严格保证一一对应的关系,否则就会出现参数类型不匹配的错误,从而导致调用方法失败。如下:

在这里插入图片描述

二、方法的重载

1.重载的概念

【概念】

方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。调用重载方法时,Java编译器能通过检查调用的方法的参数类型和个数选择一个恰当的方法。

2.例题分析

认真看下面例子中的add方法

  public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int ret = add(a, b);
        System.out.println("ret = " + ret);
        double a2 = 10.5;
        double b2 = 20.5;
        double ret2 = add(a2, b2);
        System.out.println("ret2 = " + ret2);
        double a3 = 10.5;
        double b3 = 10.5;
        double c3 = 20.5;
        double ret3 = add(a3, b3, c3);
        System.out.println("ret3 = " + ret3);
    }

    public static int add(int x, int y) {
        return x + y;
    }

    public static double add(double x, double y) {
        return x + y;
    }

    public static double add(double x, double y, double z) {
        return x + y + z;
    }


在这里插入图片描述

【总结】

方法的名字都叫 add. 但是有的 add 是计算 int 相加, 有的是 double 相加; 有的计算两个数字相加, 有的是计算三个数
字相加.
同一个方法名字, 提供不同版本的实现, 称为 方法重载

【注意】

一.方法名一定要相同。
二.方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体。
1.如果参数个数不同,就不管它的参数类型了!
2.如果参数个数相同,那么参数的类型必须不同。
三.方法的返回类型、修饰符可以相同,也可不同。

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

三、方法的递归

1.递归定义

简单来说,递归算是套娃。
从前有座山,山里有座庙,庙里有个老和尚,老和尚正在给小和尚讲故事:从前有座山,山里有座庙,庙里有个老和尚,老和尚正在给小和尚讲故事:…

除非老和尚不讲了,否则这个故事就一直套娃下去。

递归,就是在运行的过程中调用自己。

构成递归需具备的条件:

  • 子问题须与原始问题为同样的事,且更为简单;
  • 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

2.例题分析

举个例子:递归求 N 的阶乘

 public static void main(String[] args) {
        int n = 5;
        int ret = factor(n);
        System.out.println("ret = " + ret);
    }
    public static int factor(int n) {
        System.out.println("函数开始, n = " + n);
        if (n == 1) {
            System.out.println("函数结束, n = 1 ret = 1");
            return 1;
     }else{
            int ret = n * factor(n - 1);
            System.out.println("函数结束, n = " + n + " ret = " + ret);
            return ret;
        }
    }

分析递归过程如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.递归应用场景

递归算法一般用于解决三类问题:

  • 数据的定义是按递归定义的。(Fibonacci函数)
  • 问题解法按递归算法实现。这类问题虽则本身没有明显的递归结构,但用递归求解比迭代求解更简单,如Hanoi问题。
  • 数据的结构形式是按递归定义的。如二叉树、广义表等,由于结构本身固有的递归特性,则它们的操作可递归地描述。

【注意】

虽然递归操作有很多的优点,但是缺点也很明显

  • 使用递归实现需要函数压栈和弹栈的操作,所以程序的运行速度比不用递归实现要慢得多。如果操作不慎,还极易出现死循环,所以在使用递归一定要设置递归操作的终止条件。

下面给大家推荐递归的两个经典例题:

  • 求斐波那契数列的第 N 项
  • 求解汉诺塔问题(提示, 使用递归)
  • 青蛙跳台阶问题(提示, 使用递归)

有兴趣的同学可以去自行尝试!

总结

最近在看《士兵突击》,迷惘了,希望能够找点东西激励自己。《士兵突击》在某种程度上,真的让我感悟良多。推荐大家去看看。
里面的台词让我受益良多。
“心稳了,手也就稳了”
“想到和得到之间还有两个字,就是做到”

各位,共勉了!

到此这篇关于Java程序中方法的用法重载和递归的文章就介绍到这了,更多相关Java 方法 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一篇文章带你了解JVM内存模型

    一篇文章带你了解JVM内存模型

    本文讲解了Java 内存模型来看看解决可见性、有序性问题的 Java 内存模型(JMM),今天通过本文给大家介绍Java 内存模型(JVM)的相关知识,感兴趣的朋友一起看看吧
    2021-09-09
  • SpringBoot结合Redis实现接口幂等性的示例代码

    SpringBoot结合Redis实现接口幂等性的示例代码

    本文主要介绍了SpringBoot结合Redis实现接口幂等性的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Java简单高效实现分页功能

    Java简单高效实现分页功能

    这篇文章主要介绍了Java简单高效实现分页功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • SpringBoot集成I18n国际化文件在jar包外生效问题

    SpringBoot集成I18n国际化文件在jar包外生效问题

    这篇文章主要介绍了SpringBoot集成I18n国际化文件在jar包外生效问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • TOMCAT内存溢出及大小调整的实现方法

    TOMCAT内存溢出及大小调整的实现方法

    下面小编就为大家带来一篇TOMCAT内存溢出及大小调整的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 使用Spring自定义注解实现任务路由的方法

    使用Spring自定义注解实现任务路由的方法

    本篇文章主要介绍了使用Spring自定义注解实现任务路由的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • JDK的具体安装步骤(带图带解释巨详细)

    JDK的具体安装步骤(带图带解释巨详细)

    Java是一种广泛使用的编程语言,许多应用程序和系统都依赖于它,如果您想进行Java编程或运行Java应用程序,首先需要安装Java开发工具包(JDK),这篇文章主要给大家介绍了关于JDK具体安装步骤的相关资料,文中介绍的方法带图带解释巨详细,需要的朋友可以参考下
    2024-05-05
  • JavaWeb中struts2实现文件上传下载功能实例解析

    JavaWeb中struts2实现文件上传下载功能实例解析

    这篇文章主要介绍了JavaWeb中struts2文件上传下载功能的实现,在Web应用系统开发中,文件上传和下载功能是非常常用的功能,需要的朋友可以参考下
    2016-05-05
  • Maven介绍与配置+IDEA集成Maven+使用Maven命令小结

    Maven介绍与配置+IDEA集成Maven+使用Maven命令小结

    Maven是Apache软件基金会的一个开源项目,是一个优秀的项目构建管理工具,它用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、测试、打包和发布等工作,本文给大家介绍Maven介绍与配置+IDEA集成Maven+使用Maven命令,感兴趣的朋友一起看看吧
    2024-01-01
  • 快速解决idea @Autowired报红线问题

    快速解决idea @Autowired报红线问题

    这篇文章主要介绍了快速解决idea @Autowired报红线问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02

最新评论