JavaSE 基础语法 - 方法的使用 - ①
在实际开发中一个完整的程序往往由成千上万个方法组成。例如我们每天使用的微信、支付宝、淘宝等应用每点击一个按钮、发送一条消息、完成一次支付背后都会调用不同的方法来完成相应的功能。那么什么是方法为什么要使用方法先来看一个简单的例子。假设现在需要计算两个整数的和。第一次inta10;intb20;System.out.println(ab);第二次inta100;intb200;System.out.println(ab);第三次inta1000;intb2000;System.out.println(ab);如果程序中有几十甚至几百处这样的计算我们只能不断地复制粘贴代码。这种做法不仅会增加代码量还会降低程序的可维护性。例如当计算逻辑发生变化时我们需要逐个修改所有地方很容易出现遗漏。因此我们需要一种机制把完成同一功能的代码封装起来在需要的时候直接调用。这种机制就是方法Method。一、什么是方法概念方法Method是完成某个特定功能的一段代码它能够被重复调用从而实现代码复用。简单来说方法就是将具有独立功能的代码封装起来并通过方法名进行调用。例如我们每天都会使用手机的拍照功能。拍照时我们并不需要关心相机如何打开如何自动对焦如何调整曝光如何保存图片我们只需要点击拍照按钮即可。这里的拍照就可以理解为一个方法。程序开发也是一样。例如Java 已经为我们提供了很多现成的方法System.out.println(Hello Java);其中println()就是一个方法它负责完成输出内容到控制台这一功能。我们只需要调用它而不用关心它内部是如何实现的。特点一个方法通常具有以下特点完成一个独立的功能可以被多次调用能够接收数据参数可以返回计算结果能够提高代码的复用性。例如publicstaticvoidprintHello(){System.out.println(Hello Java);}以后只需要调用 printHello() 这个函数就可以重复执行该功能。二、为什么需要方法在程序开发中我们经常会遇到大量重复代码。例如某学校管理系统需要多次输出欢迎信息。没有使用方法时System.out.println( 欢迎使用学生管理系统 );System.out.println(1. 添加学生);System.out.println(2. 删除学生);System.out.println(3. 修改学生);System.out.println(4. 查询学生);System.out.println( 欢迎使用学生管理系统 );System.out.println(1. 添加学生);System.out.println(2. 删除学生);System.out.println(3. 修改学生);System.out.println(4. 查询学生);可以发现同一段代码被重复编写了两次。如果菜单内容发生变化例如增加一个新的功能那么所有地方都需要修改。显然这样的程序维护成本非常高。如果这时候使用方法来进行封装publicstaticvoidprintMenu(){System.out.println( 欢迎使用学生管理系统 );System.out.println(1. 添加学生);System.out.println(2. 删除学生);System.out.println(3. 修改学生);System.out.println(4. 查询学生);}需要显示菜单时只需要调用printMenu();printMenu();程序运行结果与之前完全一致但代码更加简洁。方法带来的优势1、提高代码复用性同一段代码只需要编写一次就可以多次调用。例如printMenu();可以随时重复使用。2、降低维护成本如果菜单内容需要修改只需要修改方法中的代码即可。例如publicstaticvoidprintMenu(){System.out.println( 欢迎使用学生管理系统 );System.out.println(1. 添加学生);System.out.println(2. 删除学生);System.out.println(3. 修改学生);System.out.println(4. 查询学生);System.out.println(5. 退出系统);}所有调用该方法的地方都会自动生效。3、提高代码可读性比如说看到打印菜单的方法我们就可以立马知道当前代码的作用就是输出菜单方法名能够很好的表达程序意图。4、符合模块化开发思想一个大型项目通常会被拆分成多个模块。例如用户登录商品管理订单管理支付功能每个模块内部又包含许多方法。这样能够使整个项目结构更加清晰也便于团队协作开发。方法不是越多越好刚学的时候可能认为“为了提高复用性把每一行代码都封装成一个方法。”这种做法其实并不可取。例如publicstaticvoidprintOne(){System.out.println(1);}publicstaticvoidprintTwo(){System.out.println(2);}这种方法没有实际意义反而增加了阅读成本。因此一个好的方法应该遵循一个方法只完成一项独立的功能。这也是软件开发中较常见的单一职责原则。三、方法的定义在现阶段中定义一个方法的基本语法如下访问修饰符static返回值类型 方法名(参数列表){方法体}例如publicstaticvoidsayHello(){System.out.println(Hello Java);}这是一个最简单的方法。它的作用就是输出Hello Java方法定义的语法格式publicstaticvoid方法名(){}例如publicstaticvoidprintLine(){System.out.println(------------------------);}以后只需要调用printLine() , 就可以输出分割线。方法定义的位置在 Java 中方法必须定义在类Class中。例如publicclassDemo{publicstaticvoidprintHello(){System.out.println(Hello);}}在 Java 中从 Java 16 开始允许在方法内部定义方法这叫做局部方法Local Method但必须是 static 上下文且不能有访问修饰符。publicclassDemo{publicstaticvoidmain(String[]args){// Java 16 支持voidprint(){System.out.println(Hello);}print();}}目前这个阶段我们暂时不讨论。四、方法的组成一个完整的方法由多个部分组成。例如publicstaticintsum(inta,intb){returnab;}组成部分说明public访问修饰符static静态关键字int返回值类型sum方法名(int a, int b)参数列表{}方法体return返回结果4.1 访问修饰符public访问修饰符用于控制方法的访问权限。目前学习阶段我们统一使用public表示任何地方都可以访问该方法。后续学习面向对象时还会学习到privateprotected默认访问权限4.2 static 关键字目前定义的方法都会写static它表示当前方法属于类可以直接通过类名或者在 main 方法中直接调用。关于static的具体作用我们将在后续《面向对象》章节进行详细讲解。现阶段只需要记住定义方法时先写上 static 即可。4.3 返回值类型返回值表示方法执行完成后是否需要把结果返回给调用者。例如void表示没有返回值。publicstaticvoidprintHello(){}而int表示方法会返回一个整数。publicstaticintsum(inta,intb){}4.4 方法名方法名就是方法的名称。比如说printHello()中的printHello就是方法名。方法名建议遵循以下规范使用小驼峰命名法名称要见名知意一般使用动词开头。例如login()printMenu()calculateTotal()findStudent()都属于比较规范的方法命名。4.5 参数列表参数用于接收调用者传递的数据。(int a, int b)表示方法需要两个整数。如果没有参数()括号不能为空省略必须要写。4.6 方法体方法体就是{ }里面编写的代码。例如publicstaticvoidprintHello(){System.out.println(Hello Java);}System.out.println(Hello Java);这里就是方法体中的代码。五、方法的调用定义好方法之后并不会自动执行。只有调用方法时方法中的代码才会运行。例如publicclassDemo{publicstaticvoidprintHello(){System.out.println(Hello Java);}publicstaticvoidmain(String[]args){printHello();}}printHello();这里就是方法调用。在定义方法的时候只是创建了方法调用方法的时候才会真正的去执行。六、形参与实参publicstaticvoidprintSum(inta,intb){System.out.println(ab);}调用printSum(10, 20)的时候这里的a、b和10、20到底是什么关系为什么调用方法时把10、20传进去方法里面就可以直接使用a、b要理解这一点就需要先认识两个概念形参Formal Parameter形式参数实参Actual Parameter实际参数什么是形参形参全称形式参数。是在定义方法时声明的参数变量。例如publicstaticvoidprintSum(inta,intb){System.out.println(ab);}这里的int a 和 int b就是两个形参。形参可以理解为一种特殊的局部变量它们在方法被调用时由实参赋值初始化。它们只有在方法执行时才会创建方法结束后就会被销毁。因此形参并不会一直存在于程序中。什么是实参实参全称实际参数。是在调用方法时真正传递给方法的数据。例如printSum(10,20);这里的10 和 20就是实参。实参不仅可以是具体的数据还可以是变量。例如intx10;inty20;printSum(x,y);这里的x 和 y同样属于实参。形参与实参之间的关系很多人都误以为“调用方法以后形参就是实参。”其实并不是。正确的理解应该是调用方法时实参会把自己的值复制一份交给形参。例如intx10;print(x);对应的方法publicstaticvoidprint(intnum){System.out.println(num);}整个过程可以理解为调用之前-x10调用时-复制了一份数据-赋值给了 num-num10因此x和num其实是两个完全不同的变量只是它们保存的数据是一样的而已。修改其中一个变量的值的时候这个时候不会影响到另一个变量。完整的示例例如publicclassDemo{publicstaticvoidprintAge(intage){System.out.println(年龄age);}publicstaticvoidmain(String[]args){intmyAge18;printAge(myAge);}}这里位置属于什么age形参myAge实参变量18实际的数据值调用时myAge ↓18↓ 复制 ↓ age ↓18因此方法内部操作的是age而不是myAge七、方法调用过程栈内存分析很多初学者学习方法时都会有一个疑问方法调用之后到底发生了什么理解这一点对后续学习数组、面向对象、递归以及 JVM都非常重要。下面通过一个简单的例子分析方法调用过程。publicclassDemo{publicstaticvoidprint(intnum){System.out.println(num);}publicstaticvoidmain(String[]args){inta10;print(a);}}第一步程序启动JVM 启动后会加载包含 main 方法的类然后调用public static void main(String[] args)作为程序入口。此时main()方法进入栈内存Stack。栈内存 ┌──────────────┐ │main()│ └──────────────┘然后执行inta10;此时栈内存 ┌──────────────┐ │main()│ │ a10│ └──────────────┘第二步调用方法执行print(a);Java 会进入print(intnum)// 进入这个方法内部于是JVM 会为print()方法再创建一块新的栈空间栈帧。栈内存 ┌──────────────┐ │print()│ │ num10│ ├──────────────┤ │main()│ │ a10│ └──────────────┘这里的num就是复制得到的10并不是a本身。第三步执行方法体进入System.out.println(num);输出10第四步方法执行结束执行完成后print()立即结束。对应的栈帧立即释放。于是栈内存 ┌──────────────┐ │main()│ │ a10│ └──────────────┘可以看到方法结束以后num以及不存在了因为它只是print()方法里面的局部变量。方法调用遵循先进后出Java 的方法调用采用栈Stack结构。栈有两个特点后进入的方法先执行结束先进入的方法最后结束。例如main()↓methodA()↓methodB()执行顺序main()↓methodA()↓methodB()↓methodB()结束 ↓methodA()结束 ↓main()结束这种结构称为先进后出Last In First OutLIFO后续学习 JVM 时我们会详细介绍栈帧Stack Frame的组成。八、无返回值方法8.1 无参无返回值方法无参无返回值方法是最简单的一类方法。它既不需要接收数据也不会返回结果。语法如下publicstaticvoid方法名(){方法体}例如publicstaticvoidmain(String[]args){printLine();// 调用方法打印分割线System.out.println(欢迎学习 Java);printLine();}这种方法通常用于输出菜单打印分隔线输出提示信息记录日志8.2 有参无返回值方法很多时候一个方法需要根据不同的数据执行不同的操作。例如输出不同用户的姓名。如果没有参数publicstaticvoidprintName(){System.out.println(张三);}无论调用多少次都只能输出固定内容。为了提高方法的灵活性我们可以为方法添加参数。例如publicstaticvoidprintName(Stringname){System.out.println(name);}调用printName(张三);printName(李四);printName(王五);可以看到同一个方法能够处理不同的数据而无需重复编写多个方法。再例如计算并输出两个整数的和publicstaticvoidprintSum(inta,intb){System.out.println(ab);}调用printSum(10,20);printSum(100,200);printSum(5,8);与无参方法相比有参方法最大的优势在于方法的逻辑保持不变但可以通过参数处理不同的数据提高了代码的灵活性和复用性。九、有返回值方法例如publicstaticvoidprintSum(inta,intb){System.out.println(ab);}虽然能够输出结果。但是如果我们需要继续使用这个计算结果呢例如计算两个数的和再继续参与其他计算。此时仅仅输出结果已经不能满足需求。因此就需要使用有返回值方法。什么是返回值返回值就是方法执行完成以后把计算结果返回给调用者。例如publicstaticintsum(inta,intb){returnab;}这里的int表示方法最终会返回一个整数。调用intresultsum(10,20);System.out.println(result);// 运行结果30整个执行过程sum(10,20)↓30↓ result ↓ 输出返回值类型必须一致例如publicstaticintgetAge(){return18;}返回值类型int所以必须返回int。注意返回值的类型必须与声明类型兼容即可以发生隐式类型转换否则编译报错。一个完整案例编写一个方法计算圆的面积。publicstaticdoublegetArea(doubleradius){return3.14*radius*radius;}调用doubleareagetArea(5);System.out.println(area);// 输出78.5可以看到计算逻辑被封装在方法内部。调用者只需要获取最终结果即可。十、return 关键字在 Java 中return是方法中非常重要的关键字。它主要有两个作用。作用一返回数据例如publicstaticintadd(inta,intb){returnab;}这里的return表示把a b返回给调用者比如说调用intresultadd(10,20);实际上是把计算好的结果返回回来,赋值给result。作用二结束方法即使方法没有返回值也可以使用return来提前结束方法。例如publicstaticvoidcheckAge(intage){if(age18){System.out.println(未成年);return;}System.out.println(允许进入);}调用checkAge(15);输出 未成年 执行到return方法立即结束。后面的代码System.out.println(允许进入);不会执行了。return 后面不能再写代码例如publicstaticvoidtest(){return;System.out.println(Hello);}编译错误。因为执行了return后方法已经结束。后面的代码永远不会执行。Java 将其称为不可达的语句。

相关新闻

掌握1对1与1对多数据库关系

掌握1对1与1对多数据库关系

1.1对1何为1对1 2个表互相对照对方 没有其他的表 在生活中常见的1对1关系有作者和作者信息 一个作者只有一个信息 这个信息只能是这个作者作者 李白 信息 朝代、年龄、笔名如果将作者删除那么 信息也会跟着一起删除 两个表是关联的关系然后是操作1.查所有的作者 作者下带着资…

2026/9/18 20:37:18 阅读更多 →
不同系统下设置静态IP

不同系统下设置静态IP

虽然所有 Linux 系统在底层的内核操作是相同的(临时配置都可以用 ip 或 ifconfig),但让静态 IP 永久生效的配置文件格式、路径以及后台网络管理服务,在不同操作系统中截然不同。各大常见系统设置静态 IP 的机制对比与操作示例说明…

2026/9/25 3:04:12 阅读更多 →
3分钟掌握Chrome滚动截图神器:一键保存完整网页的终极方案

3分钟掌握Chrome滚动截图神器:一键保存完整网页的终极方案

3分钟掌握Chrome滚动截图神器:一键保存完整网页的终极方案 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-e…

2026/9/21 17:31:07 阅读更多 →

最新新闻

Edge隐藏多线程下载开关:开启后大文件下载速度翻倍

Edge隐藏多线程下载开关:开启后大文件下载速度翻倍

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 4:50:43 阅读更多 →
STM32中断系统实战:NVIC优先级、EXTI与HAL库回调全解析

STM32中断系统实战:NVIC优先级、EXTI与HAL库回调全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 4:50:43 阅读更多 →
C语言开根号全解析:从sqrt到pow的实战指南

C语言开根号全解析:从sqrt到pow的实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 4:50:42 阅读更多 →
Arduino WS2812B彩灯DIY:从接线到彩虹灯环完整实战

Arduino WS2812B彩灯DIY:从接线到彩虹灯环完整实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 4:50:42 阅读更多 →
pygame俄罗斯方块实战:逻辑与渲染分离的完整开发指南

pygame俄罗斯方块实战:逻辑与渲染分离的完整开发指南

简介:基于Python pygame的经典俄罗斯方块小游戏开发资源包,面向计算机相关专业高校学生与Python游戏开发初学者,可完成课程实训、课程设计或期末作业,也可作为毕设或项目立项演示。资源共6个文件,包含tetris.py主程序、…

2026/9/25 4:50:42 阅读更多 →
OpenClaw 部署安全指南:从会话锁到提示注入的完整防护

OpenClaw 部署安全指南:从会话锁到提示注入的完整防护

本来我想先夸一夸 OpenClaw 这玩意儿本地跑起来有多爽,但这篇文章还是直接从风险讲起吧。你把它部署好、接到 Teams 或飞书上、再配上千问之类的模型,它就从一个普通程序变成了一个常驻代理:能读文件、能发消息、能调 API、还能替你执行命令。…

2026/9/25 4:49:42 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →