【Java SE 基础学习打卡】28 方法的定义与调用

目录

  • 前言
  • 一、先记死:方法的定义格式
  • 二、逐个拆解:方法定义的 6 个核心组成部分
    • 2.1 修饰符(新手先掌握 public static)
    • 2.2 返回值类型:方法执行完 “要不要返回结果、返回什么类型的结果”
    • 2.3 方法名:给你的 “工具” 起名字(见名知意)
    • 2.4 参数列表:给方法的 “原材料”(新手核心难点)
    • 2.5 方法体:方法的 “核心功能代码”
    • 2.6 return 语句:方法的 “产出 / 结束信号”
  • 三、实操 1:无参方法的定义与调用(最简单的入门案例)
  • 四、实操 2:带参方法的定义与调用(核心重点)
    • 4.1 场景 1:计算两数之和(单个返回值,两个参数)
    • 4.2 场景 2:计算 1 到 n 的和(单个参数,循环逻辑)
    • 4.3 参数传递逻辑(新手必须懂)
  • 五、方法调用的执行流程(从内存角度简单说)
    • 5.1 核心概念:方法栈(临时工作台)
    • 5.2 执行流程拆解(以 add (10,20) 为例)
    • 5.3 生活化类比
  • 六、新手必避的 7 个 “致命坑”(反例 + 正例 + 后果)
    • 6.1 坑 1:返回值类型和 return 值类型不匹配
    • 6.2 坑 2:有返回值的方法漏写 return 语句
    • 6.3 坑 3:调用方法时参数个数不匹配
    • 6.4 坑 4:调用方法时参数类型不匹配
    • 6.5 坑 5:方法名写错(调用和定义不一致)
    • 6.6 坑 6:在方法体里定义方法(方法嵌套)
    • 6.7 坑 7:void 方法里 return 后跟值
  • 总结

前言

上一节咱们搞懂了方法的核心概念 —— 方法是可复用的代码块,就像生活里的 “工具”。但光知道 “工具好用” 还不够,得学会 “怎么造工具(定义方法)” 和 “怎么用工具(调用方法)”:比如想造一个 “计算两数之和的工具”,该怎么给工具起名、定规则?想使用这个工具时,该怎么传递数字、怎么拿到计算结果?

这一节咱们就从 “实操” 角度讲透方法:先记牢方法的定义格式,再拆解每个组成部分的规则(重点是返回值和参数),然后通过无参、带参两个场景的完整例子,掌握定义和调用的全流程,最后从内存角度简单理解方法调用的执行逻辑。

一、先记死:方法的定义格式

方法的定义就像 “造工具的图纸”,必须按固定格式写,少一个关键部分都不行。先记住完整模板,后续再拆解每部分的作用:

// 方法定义完整模板修饰符 返回值类型 方法名(参数列表){// 方法体:工具的核心功能代码执行语句;// return语句:根据返回值类型决定是否写、写什么return返回值;}

举个直观的 “成品例子”(计算两数之和的方法),对应模板看结构:

// 修饰符:public static | 返回值类型:int | 方法名:add | 参数列表:int num1, int num2publicstaticintadd(intnum1,intnum2){// 方法体:求和逻辑intresult=num1+num2;// return语句:返回求和结果(类型和返回值类型int一致)returnresult;}

二、逐个拆解:方法定义的 6 个核心组成部分

咱们把模板拆成 6 个部分,逐个讲清楚 “是什么、怎么写、要注意什么”,重点攻克返回值和参数两个新手难点:

2.1 修饰符(新手先掌握 public static)

  • 作用:规定方法的 “访问权限” 和 “调用方式”,新手阶段不用深究,先固定写public static(后续学面向对象再细化);

  • 写法public static是固定组合,写在返回值类型前面;

  • 注意:新手不用改这部分,按模板写就行,避免出错。

2.2 返回值类型:方法执行完 “要不要返回结果、返回什么类型的结果”

这是新手最容易错的部分,核心规则:返回值类型决定了 return 语句要返回什么类型的数据

  • 两种核心类型
返回值类型含义对应 return 语句例子(工具类比)
void方法执行完不返回任何结果可以写return;(可选)或不写打印欢迎语的工具(只输出,不返回东西)
具体类型方法执行完返回对应类型的结果必须写return 对应类型的值;求和工具(返回 int 类型的和)、求平均分工具(返回 double 类型的平均分)

注意

  • 返回值类型可以是 int、double、boolean 等基本类型,也可以是后续学的字符串、数组等;

  • 不能乱写类型,比如返回值类型写 int,return 就不能返回字符串(编译报错)。

2.3 方法名:给你的 “工具” 起名字(见名知意)

  • 命名规则(新手必守)

    1. 小驼峰命名:第一个单词小写,后续单词首字母大写(比如addNumprintWelcomecalcAvg);

    2. 见名知意:用动词 + 名词,一眼知道功能(比如calcAvg=calculate average,计算平均分;print99Table= 打印 99 乘法表);

    3. 不能用关键字(比如 if、for、while),不能以数字开头。

  • 反例(新手别踩)add123(无意义)、PrintWelcome(大驼峰)、123add(数字开头)。

2.4 参数列表:给方法的 “原材料”(新手核心难点)

参数列表就是调用方法时,需要传给方法的 “原材料”—— 比如调用求和方法,需要传两个数字作为 “原材料”。

  • 核心概念

    • 形参(形式参数):方法定义时写的参数(比如int num1),相当于 “工具的原材料入口”;

    • 实参(实际参数):方法调用时传的具体值(比如add(10,20)里的 10、20),相当于 “实际放进工具的原材料”。

  • 语法规则

    1. 格式:类型1 参数名1, 类型2 参数名2, ...(多个参数用逗号分隔);

    2. 每个参数必须指定类型(哪怕都是 int,也要分别写:int a, int b,不能写int a,b?不,其实可以,但新手建议分开写,更清晰);

    3. 无参数:括号里空着(()),表示方法不需要原材料;

    4. 参数名不能重复(比如int a, int a是错的)。

  • 例子

    • 无参:printWelcome()(打印欢迎语,不用原材料);

    • 单个参数:sumToN(int n)(计算 1 到 n 的和,需要传 n);

    • 多个参数:calcAvg(int chinese, int math, int english)(计算三科平均分,需要传三个成绩)。

2.5 方法体:方法的 “核心功能代码”

  • 作用:存放实现方法功能的所有代码(循环、判断、运算等);

  • 注意

    1. 必须用{}包裹,哪怕只有一行代码;

    2. 方法体里可以调用其他方法(比如在calcAvg里调用add方法求和);

    3. 不能在方法体里再定义方法(比如在 add 方法里再定义 print 方法,编译报错)。

2.6 return 语句:方法的 “产出 / 结束信号”

return 语句的作用分两种,和返回值类型强绑定:

  • 情况 1:返回值类型是 void(无返回值)

    • 可以不写 return 语句;

    • 如果写,只能写return;(表示立即结束方法),后面不能跟任何值。

    // 例子:打印欢迎语(void类型)publicstaticvoidprintWelcome(){System.out.println("欢迎学习Java方法!");return;// 可选,写了表示立即结束方法(这里写不写效果一样)}
  • 情况 2:返回值类型是具体类型(比如 int、double)

    • 必须写return 对应类型的值;

    • return 后面的值类型必须和返回值类型一致(比如返回值类型是 int,return 就不能返回 10.5);

    • return 语句执行后,方法立即结束,后面的代码不会执行。

    // 例子:求和方法(int类型返回值)publicstaticintadd(intnum1,intnum2){intresult=num1+num2;returnresult;// 必须写,且类型是intSystem.out.println("这行代码永远执行不到");// return后不可达,编译报错}

三、实操 1:无参方法的定义与调用(最简单的入门案例)

无参方法就是 “不需要原材料的工具”,比如 “打印固定欢迎语”“打印 99 乘法表”(不需要传参数,直接执行)。

完整例子:定义并调用 “打印欢迎语” 的无参方法

publicclassMethodDemo1{// 1. 定义无参方法(返回值类型void,参数列表为空)publicstaticvoidprintWelcome(){// 方法体:核心功能(打印欢迎语)System.out.println("======================");System.out.println(" 欢迎学习Java方法!");System.out.println(" 今天学方法的定义与调用~");System.out.println("======================");// void类型,return可选(这里省略)}// 程序入口:main方法(所有代码从这里开始执行)publicstaticvoidmain(String[]args){// 2. 调用无参方法:方法名+()System.out.println("调用方法前...");printWelcome();// 调用printWelcome方法System.out.println("调用方法后...");}}

执行结果:

调用方法前...======================欢迎学习Java方法! 今天学方法的定义与调用~======================调用方法后...

调用执行流程拆解(新手必懂):

  1. 程序从 main 方法开始执行,先打印 “调用方法前…”;

  2. 执行printWelcome(),跳转到 printWelcome 方法的定义处;

  3. 执行 printWelcome 方法体里的所有打印语句;

  4. printWelcome 方法执行完,回到 main 方法的调用处,继续执行后面的 “调用方法后…”。

四、实操 2:带参方法的定义与调用(核心重点)

带参方法是最常用的场景,比如 “计算两数之和”“计算 1 到 n 的和”“计算平均分”,需要传参数才能执行。

4.1 场景 1:计算两数之和(单个返回值,两个参数)

publicclassMethodDemo2{// 1. 定义带参方法:返回值类型int,参数列表int num1, int num2publicstaticintadd(intnum1,intnum2){// 方法体:求和逻辑intsum=num1+num2;// return返回求和结果(类型和返回值类型int一致)returnsum;}publicstaticvoidmain(String[]args){// 2. 调用带参方法:方法名+(实参1, 实参2)// 方式1:直接传字面量(固定值)intresult1=add(10,20);System.out.println("10+20="+result1);// 输出30// 方式2:传变量(更灵活)inta=30,b=40;intresult2=add(a,b);System.out.println("30+40="+result2);// 输出70// 方式3:嵌套调用(方法返回值作为实参)intresult3=add(result1,result2);System.out.println("30+70="+result3);// 输出100}}

4.2 场景 2:计算 1 到 n 的和(单个参数,循环逻辑)

publicclassMethodDemo3{// 定义带参方法:参数n表示计算到的数字,返回值是求和结果publicstaticintsumToN(intn){intsum=0;// 方法体里可以用循环(之前学的知识)for(inti=1;i<=n;i++){sum+=i;}returnsum;// 返回求和结果}publicstaticvoidmain(String[]args){// 调用方法,传不同的实参System.out.println("1-10的和:"+sumToN(10));// 55System.out.println("1-100的和:"+sumToN(100));// 5050}}

4.3 参数传递逻辑(新手必须懂)

Java 中参数传递的核心是 “值传递”—— 把实参的 “值” 复制一份传给形参,形参的修改不会影响实参:

publicclassParamDemo{publicstaticvoidchangeNum(intnum){num=100;// 修改形参的值}publicstaticvoidmain(String[]args){inta=10;changeNum(a);// 传实参a的值(10)给形参numSystem.out.println(a);// 输出10,实参a的值没被修改}}

类比理解:你有一张 10 元纸币(实参),复制了一张假币(形参)给别人,别人把假币改成 100 元,你的真币还是 10 元 —— 形参是实参的 “副本”,修改副本不影响原数据。

五、方法调用的执行流程(从内存角度简单说)

新手不用深入理解内存模型,只需记住 “方法栈帧” 的核心逻辑,能解释执行顺序即可:

5.1 核心概念:方法栈(临时工作台)

JVM 中有一块内存叫 “方法栈”,就像工厂里的 “临时工作台”:

  • 调用方法时:JVM 为这个方法创建一个 “栈帧”(工作台),把参数、局部变量等放在里面;

  • 方法执行时:在自己的栈帧里运行代码;

  • 方法执行完:栈帧被销毁(工作台被拆掉),回到调用处继续执行。

5.2 执行流程拆解(以 add (10,20) 为例)

5.3 生活化类比

你(main 方法)在办公室干活,需要算 10+20:

  1. 你喊 “add 工具帮我算 10+20”(调用方法);

  2. 仓库给 add 工具搭一个临时工作台(创建栈帧),把 10、20 放到台上(传参);

  3. add 工具在台上算出 30(执行方法体);

  4. add 工具把 30 递给你,拆掉工作台(销毁栈帧);

  5. 你把 30 记下来,继续干自己的活(回到 main 方法)。

六、新手必避的 7 个 “致命坑”(反例 + 正例 + 后果)

6.1 坑 1:返回值类型和 return 值类型不匹配

  • 错误示例:

    publicstaticintadd(inta,intb){doublesum=a+b;returnsum;// 返回值类型是int,却返回double}
  • 后果:编译报错!提示 “不兼容的类型:double 无法转换为 int”;

  • 正确示例:

    publicstaticintadd(inta,intb){intsum=a+b;returnsum;// 类型一致}

6.2 坑 2:有返回值的方法漏写 return 语句

  • 错误示例:

    publicstaticintsumToN(intn){intsum=0;for(inti=1;i<=n;i++){sum+=i;}// 漏写return}
  • 后果:编译报错!提示 “缺少返回语句”;

  • 正确示例:

    publicstaticintsumToN(intn){intsum=0;for(inti=1;i<=n;i++){sum+=i;}returnsum;// 加上return}

6.3 坑 3:调用方法时参数个数不匹配

  • 错误示例:

    publicstaticintadd(inta,intb){returna+b;}// 调用时只传1个参数intresult=add(10);
  • 后果:编译报错!提示 “方法 add (int,int) 未定义参数类型为 (int) 的版本”;

  • 正确示例:

    intresult=add(10,20);// 参数个数一致

6.4 坑 4:调用方法时参数类型不匹配

  • 错误示例:

    publicstaticintadd(inta,intb){returna+b;}// 传字符串类型参数intresult=add("10",20);
  • 后果:编译报错!提示 “不兼容的类型:String 无法转换为 int”;

  • 正确示例:

    intresult=add(10,20);// 类型一致

6.5 坑 5:方法名写错(调用和定义不一致)

  • 错误示例:

    // 定义方法名:addNumpublicstaticintaddNum(inta,intb){returna+b;}// 调用时写:addnum(小写)intresult=addnum(10,20);
  • 后果:编译报错!提示 “无法找到符号 addnum”;

  • 正确示例:

    intresult=addNum(10,20);// 方法名大小写一致

6.6 坑 6:在方法体里定义方法(方法嵌套)

  • 错误示例:

    publicstaticintadd(inta,intb){// 在add方法里定义print方法(错误)publicstaticvoidprint(){System.out.println("求和");}returna+b;}
  • 后果:编译报错!提示 “方法内不能定义方法”;

  • 正确示例:

    // 方法平级定义,不能嵌套publicstaticintadd(inta,intb){print();// 调用其他方法returna+b;}publicstaticvoidprint(){System.out.println("求和");}

6.7 坑 7:void 方法里 return 后跟值

  • 错误示例:

    publicstaticvoidprintWelcome(){return"欢迎";// void方法不能返回值}
  • 后果:编译报错!提示 “void 方法不能返回值”;

  • 正确示例:

    publicstaticvoidprintWelcome(){System.out.println("欢迎");return;// 可选,无值}

总结

这一节咱们掌握了方法的核心实操技能,记住 3 个核心点:

  1. 方法定义按模板写:修饰符→返回值类型→方法名→参数列表→方法体→return;

  2. 核心规则:返回值类型和 return 值类型必须一致,调用方法时参数个数 / 类型要匹配;

  3. 执行流程:调用方法创建栈帧,执行完销毁栈帧,回到调用处继续执行。

方法的定义与调用是 Java 编程的核心技能,掌握后就能把重复代码封装成 “工具”,让程序结构更清晰、复用性更高。

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

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

相关文章

小智AI蓝牙配网+声波配网:原理+流程拆解

小智AI 最新版固件更新到 2.1.0&#xff0c;相比 2.0.5 有哪些重大更新&#xff1f; 今天扫了一遍新增 commit&#xff0c;发现&#xff1a; 架构更新主要有&#xff1a; 设备状态更新机制&#xff1a;调整为设备状态机音频编解码器重构&#xff1a;用 ESP-IDF 官方音频组件…

35天,版本之子变路人甲:AI榜单太残酷!

o1从榜首暴跌至#56&#xff0c;Claude 3 Opus坠入#139。LMSYS榜单揭示残酷真相&#xff1a;大模型的「霸主保质期」只有35天&#xff01;这不是技术迭代&#xff0c;这是对所有应用层开发者的降维屠杀。 还记得OpenAI o1刚发布那会儿&#xff0c;整个科技圈那种近乎朝圣般的狂…

EAAI title-page-template 怎么填写: 期刊投稿作者信息填写指南

EAAI title-page-template 怎么填写: 期刊投稿作者信息填写指南 很多朋友在期刊投稿时,常困惑于作者信息的规范填写——姓名排序、单位标注、通讯作者指定等细节,一旦出错可能影响投稿流程。今天结合具体案例,手把手教大家如何规范填写,以本文作者团队(Jiqun Zhang、She…

精品水果线上销售网站的设计与实现毕业论文+PPT(附源代码+演示视频)

文章目录精品水果线上销售网站的设计与实现一、项目简介&#xff08;源代码在文末&#xff09;1.运行视频2.&#x1f680; 项目技术栈3.✅ 环境要求说明4.包含的文件列表&#xff08;含论文&#xff09;数据库结构与测试用例系统功能结构前端运行截图后端运行截图项目部署源码下…

别白忙活!EAAI投稿避坑指南:5条红线碰就拒,工程应用重点划重点

别白忙活!EAAI投稿避坑指南:5条红线碰就拒,工程应用重点划重点 目录 别白忙活!EAAI投稿避坑指南:5条红线碰就拒,工程应用重点划重点 一、先搞懂EAAI的核心定位:AI要落地,工程要务实 二、5条“碰就拒”红线:逐一拆解+避坑方案 红线1:新隐喻元启发式算法,大概率直接拒…

陶哲轩惊叹!数学奇点初现,AI首次给出人类无法企及的原创证明

数学奇点初现&#xff01;Gemini攻克全新数学定理&#xff0c;斯坦福大牛惊呼「想出来能吹一辈子」&#xff1b;陶哲轩预言数学家AI共生未来&#xff1b;Grok发现黎曼猜想新的隐蔽通道……汉语是人类语言的一种。比特是计算机的语言。而数学则是宇宙的语言。正如「现代物理学之…

正则表达式高级用法:超越模式匹配的工程实践

正则表达式高级用法&#xff1a;超越模式匹配的工程实践 引言&#xff1a;正则表达式的演进与现状 正则表达式自20世纪50年代由数学家Stephen Kleene提出以来&#xff0c;已从理论计算机科学的符号逻辑演变为现代软件开发中不可或缺的文本处理工具。在AI驱动的开发浪潮中&#…

让优秀的评测基准被看见|2025司南年度最受欢迎评测集评选火热征集中!

每一个优秀的评测基准&#xff0c;都是大模型能力进化的重要基石。而那些从 0 到 1 构建评测基准的研究者与团队&#xff0c;往往站在行业最前沿&#xff0c;却并不总是被足够多的人看见。 2025 司南年度最受欢迎评测集评选活动于2025年12月24日正式启动&#xff0c;目前还在火…

书匠策AI:文献综述写作的“时空折叠器”,解锁学术探索新次元

在学术的浩瀚宇宙中&#xff0c;文献综述如同一艘探险船&#xff0c;引领我们穿越知识的海洋&#xff0c;探寻未知的领域。然而&#xff0c;面对堆积如山的文献&#xff0c;如何高效、精准地完成一篇高质量的文献综述&#xff0c;成为了众多学者和学生的难题。今天&#xff0c;…

桓峰基因推出序列分析生信工具教程

桓峰基因公众号推出生信工具教程&#xff0c;有需要生信的老师可以联系我们&#xff01; SEQ 1.测序的前世今生 SEQ 2.生信工具之GFF和GTF互相转换(gffread) SEQ 3.pfam数据库的注释及本地分析(pfam_scan) SEQ 4.转录本蛋白编码能力预测软件(CPAT) SEQ 5.转录本蛋白编码能力预测…

3个扎心的经济社会真相:世界是庞氏骗局?战争为啥打?城乡消费差在哪

3个扎心的经济社会真相:世界是庞氏骗局?战争为啥打?城乡消费差在哪? 目录 3个扎心的经济社会真相:世界是庞氏骗局?战争为啥打?城乡消费差在哪? 一、世界是不是一个庞氏骗局? 二、战争发生的底层逻辑是什么? 美国频繁战争的底层逻辑:不是“好战”,而是霸权体系的“生…

Django 框架(django-admin 命令详解)

django-admin是Django框架提供的一个命令行工具&#xff0c;它是管理Django项目的核心工具。查看django-admin提供的所有命令 django-admin help创建新项目 django-admin startproject 项目名称创建新应用 django-admin startapp 应用名称检查项目配置 django-admin check这个命…

SolidWorks——12人共享一台图形工作站,20秒打开9000个零部件

在制造业数字化转型浪潮中&#xff0c;SolidWorks作为三维机械设计软件的标杆产品&#xff0c;其性能表现直接影响企业研发效率。某中型装备制造企业近期进行的极限测试显示&#xff1a;当12名工程师通过云飞云共享云桌面技术共享一台搭载NVIDIA RTX A5000显卡的工作站时&#…

YOLOv11+BiFPN双向特征金字塔:多尺度目标检测精度提升28%的实战教程

文章目录 【研发级项目】YOLOv11+BiFPN双向特征金字塔:多尺度目标检测精度提升28%的实战教程 一、项目核心:什么是BiFPN? 二、环境准备:5分钟配置依赖 三、步骤1:编写BiFPN模块(bifpn.py) 四、步骤2:注册BiFPN模块(修改tasks.py) 五、步骤3:编写YOLOv11+BiFPN的配置…

说说你对设计模式的理解

说说你对设计模式的理解 章节目录 文章目录说说你对设计模式的理解设计模式是一套 经过验证的、 被广泛应用于软件开发中的 解决特定问题的 重复利用的方案集合。它们是在软件开发领域诸多经验的基础上总结出来的&#xff0c;是具有普适性、可重用性和可扩展性的解决方案。设计…

YOLOv11+BiFPN双向特征金字塔:全方位解析多尺度检测性能优化指南

文章目录 【研发实战】YOLOv11+BiFPN双向特征金字塔:多尺度检测性能跃升全流程教程 引读:BiFPN为何是你的项目利器? 一、BiFPN核心原理:为什么它能提升多尺度检测? 二、环境准备:快速搭建YOLOv11+BiFPN开发环境 1. 基础依赖安装 三、模块植入:3步将BiFPN嵌入YOLOv11 步骤…

书匠策AI:文献综述写作的“时空穿越者”,解锁学术新维度在学术研究的浩瀚星空中,文献综述如同一盏明灯,照亮研究者前行的道路。然而,面对堆积如山的文献,如何高效、精准地完成一篇高质量的文献综述,却成了

书匠策AI&#xff1a;文献综述写作的“时空穿越者”&#xff0c;解锁学术新维度在学术研究的浩瀚星空中&#xff0c;文献综述如同一盏明灯&#xff0c;照亮研究者前行的道路。然而&#xff0c;面对堆积如山的文献&#xff0c;如何高效、精准地完成一篇高质量的文献综述&#xf…

IoTDB AINode:SQL驱动时序AI全流程落地

Apache IoTDB 作为开源时序数据库标杆&#xff0c;专为物联网场景设计&#xff0c;而 AINode 作为其原生AI节点&#xff0c;实现了“数据库即分析平台”的突破。AINode 可直接集成机器学习模型&#xff0c;通过标准SQL完成模型注册、管理与推理全流程&#xff0c;无需数据迁移或…

高效协同办公+打通数据链路,智能管理方案助力农业企业实现管理升级

某农业科技企业&#xff0c;公司专注农业科研与成果转化&#xff0c;业务覆盖作物育种、种子生产、销售、服务等于一体&#xff0c; 员工规模近500人。一、企业痛点种子管理脱节&#xff1a;从立项、出入库到生产组配&#xff0c;各环节数据分散&#xff0c;进度难追踪&#xf…

设计模式是如何分类的

设计模式是如何分类的 章节目录 文章目录设计模式是如何分类的根据应用目标&#xff0c;设计模式可以分为 创建型、 结构型和 行为型。创建型模式是关于对象创建过程的总结&#xff0c;包括单例、工厂、抽象工厂、建造者和原型模式。 结构型模式是针对软件设计结构的总结&…