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/10/17 20:25:33 阅读更多 →
不同系统下设置静态IP

不同系统下设置静态IP

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

2026/10/20 12:57:23 阅读更多 →
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/10/19 23:06:58 阅读更多 →

最新新闻

SecureCRT免安装版配置指南:离线串口调试与SSH便携部署

SecureCRT免安装版配置指南:离线串口调试与SSH便携部署

简介:本资源为SecureCRT绿色便携版免安装包,面向系统管理员、运维工程师及开发人员,解决多平台快速部署安全终端连接工具的需求,尤其适用于需在不同电脑间频繁切换、无管理员权限或追求轻量使用的场景。压缩包共137个文件&#xf…

2026/10/20 14:00:00 阅读更多 →
防火墙规则集时序配置:顺序、生效时间与安全空窗排查

防火墙规则集时序配置:顺序、生效时间与安全空窗排查

防火墙规则集里的时序配置,是我这几年排查安全事件时最常踩的隐形坑。规则明明写对了,但因为顺序放错、时间对象失效、批量下发存在中间态,导致规则的实际生效时间和预期完全对不上,轻则策略空转半个月没人发现,重则直…

2026/10/20 14:00:00 阅读更多 →
Python Pygame核心机制与实战:从零构建接苹果小游戏

Python Pygame核心机制与实战:从零构建接苹果小游戏

很多人在命令行里写过一阵Python脚本之后,总想搞点“能动的、看得见的东西”。Python Pygame模块就是你会碰到的第一块敲门砖:一个基于SDL封装、专门用来做2D图形和游戏的原生库。我第一次用它做窗口程序的时候,印象最深的不是那种“我能控制…

2026/10/20 14:00:00 阅读更多 →
100套可配置ECharts大数据大屏模板工程包

100套可配置ECharts大数据大屏模板工程包

简介:本资源是一套面向数据可视化工程师、前端开发人员及政企数字化项目实施者的专业级大屏模板集合,覆盖社区治理、智慧物业、数字政务、智能交通、金融银行等十余个高需求行业场景,有效解决业务数据实时监控与决策看板快速搭建难题。压缩包…

2026/10/20 14:00:00 阅读更多 →
AI加速剪辑工作流:字幕、粗剪与卡点自动化实战

AI加速剪辑工作流:字幕、粗剪与卡点自动化实战

我见过太多人剪视频,剪到怀疑人生。明明素材拍得挺好,脚本也没什么大问题,但就是一剪一整夜,导出前还在逐帧删吸气声、给字幕换行、把片尾黑场拖到精确位置。你以为是效率问题,其实是你把80%的时间花在了AI 10秒就能搞…

2026/10/20 14:00:00 阅读更多 →
深度学习训练调参实战:梯度、激活函数、学习率与优化器的链路

深度学习训练调参实战:梯度、激活函数、学习率与优化器的链路

入门深度学习时,很多人会被一连串名词劝退:激活函数、优化器、学习率、梯度。我第一次跑模型的时候也觉得它们是四个独立的调参项,今天调一下学习率,明天换一个激活函数,最后模型loss曲线像心电图一样乱跳,…

2026/10/20 13:59:00 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/20 9:50:45 阅读更多 →