当前位置: 首页 > 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.存在递归的出口(问题拆分是有限的,不可能一直拆分下去)

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

递归函数如何去写:

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

示例:求阶乘

 

相关文章:

【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什么是方法 方法就是一个代…...

高级网络计算模式复习

P2P 对等网络(Peer-to-Peer Networks)是分布式系统和计算机网络相结合的产物,在应用领域和学术界获得了广泛的重视和成功,被称为“改变Internet的一代网络技术”。 peer指网络结点,在行为上是自由的——任意加入、退…...

【笔试强训选择题】Day15.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!! 文章目录 前言 一、…...

图论专题(一)

图论专题(一) 参考文献 BFS和DFS的直观解释 https://blog.csdn.net/c406495762/article/details/117307841Leetcode岛屿问题系列分析 https://blog.csdn.net/qq_39144436/article/details/124173504多源广度优先 https://blog.csdn.net/peko1/article/details/121989497拓扑排…...

新星计划2023【网络应用领域基础】————————Day4

常见的网络基础介绍 前言 我们学习了一些基础的网络协议,以及子网掩码和vlan,同时也做了个简单的单臂路由实验 这篇文章我将仔细的讲解单臂路由的应用和交换机二层接口类型,以及wireshark的教程。 一,交换机二层接口 交换机的二…...

[CTF/网络安全] 攻防世界 view_source 解题详析

[CTF/网络安全] 攻防世界 view_source 解题详析 查看页面源代码方式归类总结 题目描述:X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。 查看页面源代码方式归类 单击鼠标右键,点击查看页面源代码: …...

目前流行的9大前端框架

1. React 2. Vue 3. Angular 、 4. Svelte 官网:https://svelte.dev 中文官网:https://www.sveltejs.cn Svelte 是一种全新的构建用户界面的方法。传统框架如 React 和 Vue 在浏览器中需要做大量的工作,而 Svelte 将这些工作放到构建应用程…...

【mysql】explain执行计划之select_type列

目录 一、说明二、示例2.1 simple:简单表,不使用union或者子查询2.2 primary:主查询,外层的查询2.3 subquery:select、where之后包含了子查询,在select语句中出现的子查询语句,结果不依赖于外部…...

网易云音乐开发--音乐播放暂停切换上下首功能实现

音乐播放暂停功能实现 封装一个控制音乐播放/暂停的功能函数 看一下文档,我需要用的api 这个接口好像没有音频的url,查看一下,换个api 这样就能拿到id,并可以播放了 但是音乐并没有播放 我们少了这个 现在可以播放了&#xff…...

如何学习网络安全?

近半年我一直在整理网络安全相关资料,对于网络安全该怎么入门我谈谈我的看法,网络安全一直处于法律的边缘,学的不好或者剑走偏锋一下子人就进去了,所以我建议入门前先熟读《网络安全法》,除此之外还有《互联网安全产品…...

软件测试适合女生吗?

大家好,我是程序员馨馨,一个混过大厂,待过创业公司,有着 6 年工作经验的软件测试妹纸一枚。之前在也写过几篇文章,之后很多朋友过来咨询女生能不能做软件测试。 今天索性写篇文章,详细的介绍一下软件测试&a…...

华为云——代码托管的使用

一、打开前后端项目 登录华为云,点击页面右上角的用户名——点击个人设置 2.点击代码托管的HTTPS密码管理,设置自己的密码 3.回到代码仓库,复制HTTP地址 4.打开GitHubDesktop,点击左上角进行仓库克隆 (我这里已经cl…...

ChatGPT从⼊⻔到精通

编者寄语 ChatGPT 作为⼀种强⼤的⾃然语⾔处理模型,已经成为人工智能领域的重要研究⽅向之⼀。在不断的发展和创新 中,ChatGPT 已经具备了很强的⾃然语⾔处理能⼒,其可以实现⾃然语⾔的⽣成、理解和交互,为⼈类的⽣产和⽣活带来了…...

node + alipay-sdk 沙箱环境简单测试电脑网站支付

正式上线需要上传营业执照,不知道怎么去申请一个。。。。。 使用沙箱测试,首先前往支付宝开放平台控制台可看到左下方的沙箱测试链接: 然后设置接口加签方式,选择系统默认密钥: 系统默认密钥 -> 公钥模式 -> 查看…...

卷积神经网络详解

(一)网络结构 一个卷积神经网络里包括5部分——输入层、若干个卷积操作和池化层结合的部分、全局平均池化层、输出层: ● 输入层:将每个像素代表一个特征节点输入进来。 ● 卷积操作部分:由多个滤波器组合的卷积层。 …...

API架构的选择,RESTful、GraphQL还是gRPC

文章目录 一、RESTful1、什么是RESTful?2、RESTful架构的原则3、RESTful的适用场景4、RESTful的优点5、RESTful的缺点 二、GraphQL1、什么是GraphQL?2、GraphQL的原则3、GraphQL的优点4、GraphQL的缺点 三、gRPC1、什么是gRPC2、gRPC的应用场景3、gRPC的…...

人机融合智能的测量、计算与评价

老子在《道德经》第二十一章写道:"道之为物,惟恍惟惚。惚兮恍兮,其中有象;恍兮惚兮,其中有物。窈兮冥兮,其中有精;其精甚真,其中有信。"(“道”这个东西,没有清楚的固定实体。它是那样的恍恍惚惚啊,其中却有形象。它是那样的恍恍惚…...

虹科新品 | 高可靠性、可适用于高磁/压的线性传感器!

PART 1 什么是线性传感器? 基本上,线性传感器是一种用于测量位移和距离的设备,具有高可靠性。测量网格通过光学传感器移动测量数据,数据被光学记录并通过控制器转换为电气数据,而控制器又可以转换为路径。 因此&…...

支付系统设计五:对账系统设计01-总览

文章目录 前言一、对账系统构建二、执行流程三、获取支付渠道数据1.接口形式1.1 后台配置1.2 脚本编写1.2.1 模板1.2.2 解析脚本 2.FTP形式2.1 后台配置2.2 脚本编写2.2.1 模板2.2.2 解析脚本 四、获取支付平台数据五、数据比对1. 比对模型2. 比对器 总结 前言 从《支付系统设…...

阿里三面过了,却无理由挂了,HR反问一句话:为什么不考虑阿里?

进入互联网大厂一般都是“过五关斩六将”,难度堪比西天取经,但当你真正面对这些大厂的面试时,有时候又会被其中的神操作弄的很是蒙圈。 近日,某位测试员发帖称,自己去阿里面试,三面都过了,却被…...

LLM API安全攻防实战:从提示词注入到自动化测试方案

1. 项目概述:被忽视的LLM API安全前线最近在帮几个团队做上线前的安全审计,发现一个挺有意思的现象:大家对于传统API的鉴权、限流、SQL注入这些常规检查已经形成了肌肉记忆,但一旦涉及到LLM(大语言模型)的A…...

别再死记硬背SMO公式了!用Python手写一个SVM分类器,带你一步步拆解SMO核心逻辑

用Python手写SVM分类器:代码驱动理解SMO算法核心在机器学习领域,支持向量机(SVM)以其优秀的分类性能和坚实的数学基础著称。然而,许多学习者在理解其核心算法——序列最小优化(SMO)时,往往被复杂的数学推导所困扰。本文将采用一种…...

亚马逊 Rufus 关停,Alexa 正式上线:卖家必须读懂的6条新规则

2026年5月13日,亚马逊官方正式宣布,下线Rufus,推出全新AI购物助手:Alexa for Shopping。但是,这不是粗暴地直接下线 Rufus,而是一次购物AI底层架构的重组 —— 将 Rufus 的商品专长 与 Alexa的用户理解力&a…...

终极艾尔登法环帧率解锁指南:轻松突破60FPS限制

终极艾尔登法环帧率解锁指南:轻松突破60FPS限制 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/EldenRing…...

Scroll Reverser:让Mac的多设备滚动体验回归直觉的免费神器

Scroll Reverser:让Mac的多设备滚动体验回归直觉的免费神器 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 你是否曾经在MacBook的触控板和鼠标之间切换时&#xff0…...

基于ESP32的智能电池充电器设计:多化学体系支持与模块化架构

1. 项目概述:打造一台全能的“电池医生”手头攒了一堆不同化学体系的电池,从航模用的4S锂聚合物电池,到应急灯里的12V铅酸电池,再到各种工具里的镍氢、锂离子电池,每次充电都得翻出好几个不同的充电器,桌面…...

在多轮对话应用中观察Taotoken计费对成本的影响

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在多轮对话应用中观察Taotoken计费对成本的影响 效果展示类,结合一个需要维护长上下文的多轮对话应用案例,…...

HiveWE终极指南:快速掌握魔兽争霸III现代化地图编辑器

HiveWE终极指南:快速掌握魔兽争霸III现代化地图编辑器 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 还在为传统魔兽争霸III地图编辑器缓慢的加载速度和复杂的操作界面而烦恼吗?Hiv…...

微信小程序项目实战:从npm安装Vant Weapp到解决样式冲突的完整避坑指南

微信小程序工程化实战:Vant Weapp集成与样式冲突解决方案全解析 第一次在小程序里引入Vant Weapp时,我对着满屏错位的组件样式发呆了半小时——原本优雅的按钮变成了扭曲的色块,表单元素叠在一起像抽象画。这不是个例,根据社区反…...

别让依赖毁了你的实验:记一次Vision Mamba复现中causal_conv1d与mamba-ssm的版本“打架”事件

Vision Mamba复现实战:破解依赖冲突的工程化解决方案在深度学习项目的复现过程中,依赖管理往往是最容易被忽视却又最常导致问题的环节。最近在复现Vision Mamba模型时,我遭遇了一场典型的Python依赖"战争"——causal_conv1d与mamba…...