当前位置: 首页 > news >正文

【JAVA】Java中方法的使用,理解方法重载和递归

目录

1.方法的概念及使用

1.1什么是方法

1.2方法的定义

1.3方法调用的执行过程

1.4实参和形参

2.方法重载

2.1为什么需要使用方法重载

2.2什么是方法重载

3.递归

3.1什么是递归

3.2递归执行的过程

3.3递归的使用


1.方法的概念及使用

1.1什么是方法

方法就是一个代码片段,类似于C语言中的函数。

将程序中多次使用的代码块抽象出来形成方法,方法可以被重复调用,减少了重复代码的编写,降低程序开发的难度。

方法定义出来就是为了“代码复用”。

1.2方法的定义

方法语法格式

修饰符 返回值类型 方法名称([参数类型 形参...]){

        方法体代码;

        [return 返回值];

}

方法有没有返回值,返回值的类型是什么,都要根据方法的作用来看。

方法名称定义

采用小驼峰命名法,第一个单词全小写,多个单词从第二个单词开始首字母大写。

示例:

实现一个两个整数相加的方法(此方法需要返回两数相加之和,为整数类型)

public class Method{// 方法的定义public static int add(int x, int y) {return x + y;}
}

使用方法时的注意事项

1.在Java中不存在方法声明的概念,定义一个方法时必须要写方法体

2.方法的调用,直接使用 方法名称(参数) 即可,例如调用上述示例方法

int sum=add(1,2);

3.调用方法时,参数必须和定义方法时的参数类型保持一致,例如调用上述示例方法,传入的参数都必须为整型

4.调用方法时,若方法有返回值,调用方法时需要使用合适的变量或者程序结构来接收方法的返回值,示例同2,定义一个整型的sum来接收返回值。

1.3方法调用的执行过程

方法的调用过程

调用方法--->传递参数--->找到方法地址--->执行被调方法的方法体--->被调方法结束返回--->回到主调方法继续往下执行

方法的栈帧

方法的调用过程在JVM内部就是一个栈(先进先出的数据结构)。每个方法从调用到返回就对应操作系统栈的一个栈帧。

如图所示,方法调用时,先加载主函数,然后执行主函数中的方法,执行完之后,将方法弹出栈,JVM发现方法调用栈为空时,程序就会退出。

注意事项:

  • 定义方法时,不会执行方法的代码,只要调用的时候才执行
  • 一个方法可以被多次调用

1.4实参和形参

实参:调用方法时传递的值/参数成为实参。实参全名为实际传递参数。

形参:定义方法时给参数设置的名称,形参没有具体数值。形参全名为形式参数。

示例:如图所示,调用add()方法,传入的值为实参,方法的参数为形参。

 注意:方法中的实参和形参的传递只有值传递!

值传递是指,实参将自己的值拷贝一份复制给形参,并不是将实参这个具体的对象给形参。

举例(写一个方法,交换两个数的值):

swap方法中的 a,b交换了,main()方法中的没有变。

这是因为只进行了值传递。

2.方法重载

2.1为什么需要使用方法重载

先来看看一段代码,我们要定义一个方法,实现两个整数的和

    // 定义一个方法,实现两个整数求和public static int add(int x,int y) {return x + y;}

定义方法成功,这个时候,不想实现整数和了,想实现两个小数的和,那么再定义一个方法

    // 再定义一个方法,实现两个小数的和public static double addDouble(double x,double y) {return x + y;}

定义方法成功,这个时候,不想实现小数和了,想实现两个长整型数字的和,那么再定义一个方法

    // 再定义一个方法,实现两个长整形的和public static long addLong(long x,long y) {return x + y;}

虽然程序实现了,但是对使用者来说非常的不友好,这个时候就需要用到方法的重载了。

2.2什么是方法重载

方法重载:在同一个类中,定义了若干个方法名称相同参数的个数或类型不同与返回值无关的一组方法,称为重载方法。

示例1:实现一个方法,实现任意类型的两数和

    public static void main(String[] args) {System.out.println(add(10,20));// 若此时需要计算两个小数的和System.out.println(add(10.1,20.2));System.out.println(add(10L,20L));}// 再定义一个方法,实现两个长整形的和public static long add(long x,long y) {return x + y;}// 再定义一个方法,实现两个小数的和public static double add(double x,double y) {return x + y;}// 定义一个方法,实现两个整数求和public static int add(int x,int y) {return x + y;}

示例2:

    public static void main(String[] args) {System.out.println(10);System.out.println(10.1);System.out.println("hehe");}

println()方法传递任意参数都可以,是因为JDK中定义了很多个println()的重载方法。

3.递归

3.1什么是递归

递归:方法在执行过程中,自身调用自身的过程,称之为递归。

示例代码:

    // 传入一个整数num,就能求出该num对应的阶乘值并返回!(factor函数的语义/功能)public static int factor(int num) {if (num == 1) {return num;}int result = num * factor(num - 1);return result;}

 在factor方法中,再次调用了factor方法。

3.2递归执行的过程

执行过程图:

程序按照图中箭头顺序执行。

3.3递归的使用

递归需要满足下面三个条件才能使用:

1.一个大问题可以拆分为若干个子问题的解

2.拆分后的子问题和原问题除了数据规模不同之外,解决的思路完全相同

3.存在递归的出口(问题拆分是有限的,不可能一直拆分下去)

同时满足上述三个条件才能使用递归。

递归函数如何去写:

一定要宏观抓住递归函数的语义(定义这个函数解决什么问题),在函数内部解决当前能干的事情,剩下的事情交给子函数(递归函数)。

示例:求阶乘

 

http://www.lryc.cn/news/69260.html

相关文章:

  • 高级网络计算模式复习
  • 【笔试强训选择题】Day15.习题(错题)解析
  • 图论专题(一)
  • 新星计划2023【网络应用领域基础】————————Day4
  • [CTF/网络安全] 攻防世界 view_source 解题详析
  • 目前流行的9大前端框架
  • 【mysql】explain执行计划之select_type列
  • 网易云音乐开发--音乐播放暂停切换上下首功能实现
  • 如何学习网络安全?
  • 软件测试适合女生吗?
  • 华为云——代码托管的使用
  • ChatGPT从⼊⻔到精通
  • node + alipay-sdk 沙箱环境简单测试电脑网站支付
  • 卷积神经网络详解
  • API架构的选择,RESTful、GraphQL还是gRPC
  • 人机融合智能的测量、计算与评价
  • 虹科新品 | 高可靠性、可适用于高磁/压的线性传感器!
  • 支付系统设计五:对账系统设计01-总览
  • 阿里三面过了,却无理由挂了,HR反问一句话:为什么不考虑阿里?
  • 办公智慧化风起云涌,华为MateBook X Pro 2023是最短距离
  • 分布式项目 09.服务器之间的通信和三个工具类
  • C# 基本语法
  • 做网络爬虫需要掌握哪些技术?
  • 工作利器:三种简单方法将PPT转换成PDF
  • 《设计模式》状态模式
  • 2023年好用的设计图制作软件推荐
  • JavaNote_1.0.2_Spring
  • 微服务多模块:Springboot+Security+Redis+Gateway+OpenFeign+Nacos+JWT (附源码)仅需一招,520彻底拿捏你
  • HNU数据结构与算法分析-作业4-图结构
  • AMPL IDE语法整理