Java 方法简介

news/2024/5/8 6:29:00/文章来源:https://blog.csdn.net/weixin_47076538/article/details/129330936

如果需要经常做某一操作,则需要重复写类似的代码,比如查找某个数。此外,某些复杂的操作需要分成多个步骤进行,以便理解和维护。

为此,计算机引入了函数的概念,用来减少重复代码,分解复杂操作。

与数学中的函数类似,Java 函数又称方法,有方法名,参数(0或多个,类比 x ),结果(0或1个,类比 y)。

方法的基本结构

修饰符 返回值类型 函数名(参数类型 参数名, ...) {// 操作return 返回值;
}
public static void test(int a){System.out.println(a);
}
  • 修饰符

可选,有权限修饰符、static、final、abstract 等。

  • 返回值类型

如果没有返回值,返回值类型设为 void;

如果返回值类型不为 void,则必须返回,且 return 返回值的数据类型和声明的返回值类型必须一致。

  • 参数

可选,也叫形参,由参数类型和参数名组成,可以看成作用域在方法内的局部变量,负责接收外部参数,调用方法时传递参数实际就是给形参赋值。

可变参数:个数不定的参数,必须是参数列表的最后一个,一个方法内只能有一个可变长度参数。语法是在数据类型后面加三个点 ...,会转换为数组。

public static int getSum(int... a){// todoreturn 0;
}
  • return

return 用于显式结束函数执行,返回调用方,没有 return 时,执行到方法结尾自动返回调用方。

可选,返回值类型为 void 时,return 不是必需的。

return 可以用于方法内的任何地方,可以结合选择结构来提前结束方法执行,返回调用方。

public static void test(){int a = 1;int b = 2;if(a == b){return;}System.out.println("a 不等于 b");
}

函数可以调用同一个类中的其他函数,也可以调用其他类中的函数。

方法重载

同一个类中,方法名相同,参数签名不同,称为方法重载,与返回值无关。

参数签名不同指:参数类型不同 或 参数个数不同 或 参数类型顺序不同。

public class Math {public static double max(double a, double b)public static float max(float a, float b)public static int max(int a, int b)public static long max(long a, long b)
}

⭐方法调用的参数匹配

调用方法的时候,参数传递实际上是给参数赋值,传递的数据类型需要与函数声明的参数数据类型兼容,在没有重载的情况下,只要可以进行类型转换,就会调用该方法,在有重载的情况下,会调用最匹配的方法。

char a = 'a';
char b = 'b';
System.out.println(Math.max(a, b));

⭐方法调用的基本原理

程序从 main 方法开始执行,碰到函数调用的时候,会跳转进函数内部,函数返回后会继续执行调用后面的语句,返回到 main 方法并且 main 方法没有要执行的语句后程序结束。

方法调用可以看作无条件跳转,跳转到方法对应的指令处开始执行,方法执行完毕或者遇到 return 语句的时候,再无条件跳转回调用处,执行方法调用后的下一条指令。

计算机系统使用栈内存来存放方法调用过程中需要的数据,包括参数、返回地址以及方法内定义的局部变量,返回值不太一样,可以简单认为内存中存在一个专门的 返回值存储器

栈是一块内存,一般是先进后出,类似于一个桶,往栈里放数据称为入栈,最下面称为栈底,最上面称为栈顶,从栈顶拿出数据通常称为出栈。栈一般是从高位地址向低位地址扩展,栈底的内存地址是最高的,栈顶的是最低的。

每调用一次方法,都会将相关方法的数据入栈,调用结束出栈,main 方法的数据在栈的最下面。

public class Sum {public static void main(String[] args){int d = Sum.sum(1,2);System.out.println(d);}public static int sum(int a,int b){int c = a + b;return c;}
}

image

如上,程序从 main 方法开始执行,main 方法入栈,main 方法有一个 args 参数用来接收用户输入,然后定义了一个局部变量 int d,接收 sum 方法的返回值。

调用 sum 方法,sum 方法入栈,传入参数 1、2 以及返回地址,sum 方法中定义了一个局部变量 int c,存储参数 a + b 计算的结果,最后 return 返回。

在返回之前,返回值暂时保存到了专门的返回值存储器中。

在返回之后,指令指示器跳转到返回地址处,sum 方法出栈,然后继续往下执行 main 方法。

递归调用

方法自己调用自己叫递归调用。

递归方法自己调用自己,直到遇到终止条件才会 return 返回,而方法调用主要是通过栈来存储相关数据,每调用一次方法就会在栈内存中开辟一块空间,当递归调用次数过多时,可能导致内存溢出,不建议使用。

public static int factorial(int n){if(n == 1){return 1;}return n * factorial(n-1);
}
/*** 汉诺塔问题*/
public class HanNuoTa {public static void run(int num,char a,char b,char c){if(num < 1) {System.out.println("请输入正整数");} else if(num == 1) {System.out.println(a + " --> " + c);return;} else {run(num - 1, a, c, b);System.out.println(a + " --> " + c);run(num - 1, b, a, c);}}public static void main(String[] args) {run(3,'A','B','C');}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_77620.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为机试题:HJ108 求最小公倍数(python)

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;Python3实现&#xff08;3&#xff09;知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

基于 explore_lite包 的单个机器人自主探索建图

文章目录一、简介二、安装 explore_lite三、launch 文件配置四、实验效果五、常见问题机器人自主建图有很多方式&#xff0c;比如基于位置边界的map-explore&#xff0c;基于快速搜索树的rrt-explore&#xff0c;指定区域自主探索建图frontier-explore&#xff0c;这几种方法各…

高码率QPSK调制解调方案(FPGA实现篇)

在前面的章节中,已经讲过QPSK调制的方案和Matlab算法仿真,在本篇中,主要讲解基于FPGA的高速QPSK调制的实现。根据前面提到的技术指标,本系统传输的数据速率为500Mbps,中频为720MHz,因此,传统的串行QPSK调制已经不合适在FPGA中实现,需采用全数字的并行方式进行调制,具体…

Redis学习【11】之分布式系统

文章目录一 数据分区算法1.1 顺序分区1.1.1 轮询分区算法1.1.2 时间片轮转分区算法1.1.3 数据块分区算法1.1.4 业务主题分区算法1.2 哈希分区1.2.1 节点取模分区算法1.2.2 一致性哈希分区算法1.2.3 虚拟槽分区算法二 分布式系统环境搭建与运行2.1 系统搭建2.1.1 系统架构2.1.2 …

LeetCode 349. 两个数组的交集和 692. 前K个高频单词

两个数组的交集 难度 简单 题目链接 这道题的难度不大&#xff0c;我们可以把数组里的数据存到set里面。这样就完成了排序和去重&#xff0c;然后我们再把一个set里面的数据和另外一个set数据进行比较。如果相同就插入到数组里。 代码如下&#xff1a; 但是这个算法的时间复…

【教学典型案例】14.课程推送页面整理-增加定时功能

目录一&#xff1a;背景介绍1、代码可读性差&#xff0c;结构混乱2、逻辑边界不清晰&#xff0c;封装意识缺乏![在这里插入图片描述](https://img-blog.csdnimg.cn/bbfc5f04902541db993944ced6b62793.png)3、展示效果不美观二&#xff1a;案例问题分析以及解决过程1、代码可读性…

数学建模(一):LP 问题

文章目录数学建模&#xff08;一&#xff09;&#xff1a;LP 问题一、 MATLAB求解二、 Python 求解数学建模&#xff08;一&#xff09;&#xff1a;LP 问题 在人们的生产实践中&#xff0c;经常会遇到如何利用现有资源来安排生产&#xff0c;以取得最大经济效益的问题。此类问…

IP 地址的简介

IP 地址 Internet 依靠 TCP/IP 协议&#xff0c;在全球范围内实现不同硬件结构、不同操作系统、不同网络系统的主机之间的互联。在 Internet 上&#xff0c;每一个节点都依靠唯一的 IP 地址相互区分和相互联系&#xff0c;IP 地址用于标识互联网中的每台主机的身份&#xff0c…

IDEA这些配置,简单高效

优化导包配置配置路径&#xff1a;File-> settings -> Editor -> General -> Auto ImportAdd unambiguous imports on the fly&#xff1a;自动导包Optimize imports on th fly (for current project)&#xff1a;自动删除无用包代码提示取消大小写配置路径&#x…

UML2——行为图

目录 一、前言 二、活动图 三、交互图 3.1 一般序列图 3.2 时间约束序列图 3.3 协作图 四、用例图 五、状态图 一、前言 UML 是由视图&#xff08;View&#xff09;、图&#xff08;Diagrams&#xff09;、模型元素&#xff08;Model elements&#xff09;和通用机制等几…

Python GUI界面编程-初识

图形用户界面(Graphical User Interface&#xff0c;简称 GUI&#xff0c;又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比&#xff0c;图形界面对于用户来说在视觉上更易于接受。然而这界面若要通过在显示屏的特定位置&#xf…

mac M1 nvm安装教程,避坑

mac M1 nvm 安装问题 新款的mac搭载了苹果自研的芯片&#xff0c;放弃了intel的x86芯片&#xff0c;那之前的软件难免会存在兼容性问题。 鄙人有幸踩了第一个坑。 在通过nvm 安装不同版本的node 时&#xff0c;出现了问题。 问题一&#xff1a;先说一下 nvm的安装问题&#…

现代操作系统——Linux架构与学习

小白的疑惑 在我决定从事嵌入式&#xff08;应用层&#xff09;方面的工作时&#xff0c;我查询了大量资料该如何学习&#xff0c;几乎所有观点不约而同的都指向了学习好Linux&#xff0c;大部分工作都是在Linux环境下来进行工作的。于是我雄心勃勃的去下载Linux&#xff0c;可…

GEE开发之ERA5(气温、降水、压力、风速等)数据获取和分析

GEE开发之ERA5&#xff08;气温、降水、压力、风速等&#xff09;数据获取和分析1.ERA5介绍2.初始ERA5数据2.1 DAILY代码2.2 MONTHLY代码3.遥感影像查看&#xff08;DAILY之mean_2m_air_temperature&#xff09;4.逐日数据分析和获取(以mean_2m_air_temperature为例)5.逐月数据…

[神经网络]Swin Transformer网络

一、概述 Swin Transformer是一个用了移动窗口的层级式Vision Transformer。 在图像领域&#xff0c;Transformer需要解决如下两个问题&#xff1a; ①尺度问题&#xff1a;同一语义的物体在图像中有不一样的尺度。(大小不同) ②Resolution过大&#xff1a;若以像素点作为单位&…

呼吸机方案 以 MM32F3270 为主控板,MM32SPIN05PF 为电机控制主控

呼吸机的作用是让氧气进入肺部并排出二氧化碳&#xff0c;帮助病患顺利呼吸。呼吸机连接一条管子到患者的嘴或鼻子&#xff0c;氧气量可以通过监视器加以控制。 基于灵动微控制器的呼吸机&#xff0c;以 MM32F3270 为主控板&#xff0c;MM32SPIN05PF 为电机控制主控&#xff1…

python 操作word库docx 增强接口

前言用python 的docx 库操作word完成一些自动化的文档生成工作&#xff0c;但有时候会遇到docx库提供的操作无法直接满足业务上的需求&#xff0c;需要对其进行一些扩展。接口完善实现在指定的文字后面插入指定的文字任务&#xff1a;以下示例需要在文档中的所有 "人生苦短…

【SpringMVC】springMVC介绍

参考资料 视频资料 03_尚硅谷_SpringMVC_SpringMVC简介_哔哩哔哩_bilibili 笔记资料 第一节 SpringMVC概述 (wolai.com)链接&#xff1a;https://pan.baidu.com/s/1A7BX2TNfbGTpYene4x3Mew 提取码&#xff1a;a8d5 一、SpringMVC简介 1、什么是MVC MVC是一种软件架构的思…

js正则表达式以及元字符

0、常用的正则表达式规则 手机号 const reg /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/;密码 const reg /^[a-zA-Z0-9]{6,20}$/;验证码 const reg /^\d{6}$/;1、正则表达式的介绍与使用 正则表达式(Regular Expression)是用于匹配字符串中字符组合…

用Python Flask为女朋友做一个简单的网站(附可运行的源码)

&#x1f31f;所属专栏&#xff1a;献给榕榕&#x1f414;作者简介&#xff1a;rchjr——五带信管菜只因一枚&#x1f62e;前言&#xff1a;该专栏系为女友准备的&#xff0c;里面会不定时发一些讨好她的技术作品&#xff0c;感兴趣的小伙伴可以关注一下~&#x1f449;文章简介…