当前位置: 首页 > article >正文

告别代码臃肿!Java 基础语法 02:方法定义、调用与实战

你好呀我是正在学习 AI 智能应用开发的学习者。上一篇我们搞定了 变量、数据类型、运算符已经能写简单的运算逻辑。但代码一多就会变得又长又乱、重复度极高 —— 这时候就必须学会Java 方法方法是 Java 最基础、最重要的 “代码封装工具”学会它你的代码会瞬间变清晰、好维护。这一篇我们专门攻克方法是什么、怎么定义、怎么调用、怎么传参、怎么返回结果零基础也能一次学会 往期回顾告别语法混乱Java基础语法01理清变量、数据类型与运算符 下期预告Java 流程控制if、for、while1- 方法的基本定义与调用方法函数就是一个完成特定功能的代码块通过这个方法名可以调用此代码块完成功能方法的基本定义publicstatic返回值类型 方法名(参数列表){方法体}// public: 方法的访问修饰符表示方法可以任意访问// static: 表示方法不需要创建对象就可以访问方法的调用方法调用格式方法名(实际参数列表);代码示例publicclassFunctionDemo1{publicstaticvoidmain(String[]args){//示例计算两个数的最大值intmaxgetMax();System.out.println(最大值是max);// 20}publicstaticintgetMax(){inta10;intb20;intmaxab?a:b;returnmax;}}2- 方法的调用流程方法没有被调用的时候在方法区中的字节码文件中存放方法被调用的时候需要进入到栈内存中运行示例代码publicclassFunctionDemo2{publicstaticvoidmain(String[]args){study();//我爱学习eat();//我爱吃sleep();//我爱睡觉}publicstaticvoidstudy(){System.out.println(我爱学习);}publicstaticvoideat(){System.out.println(我爱吃);}publicstaticvoidsleep(){System.out.println(我爱睡觉);}}2.1 方法调用流程详解程序启动阶段JVM 加载FunctionDemo 2类到内存的方法区Method Area找到程序的入口点main方法在虚拟机栈JVM Stack中为main方法分配一个栈帧Stack Frame执行main方法当main方法执行时栈内存在虚拟机中创建main的栈帧栈帧包含局部变量表、操作数栈、动态链接、方法返回地址等main方法的参数args存储在局部变量表中第一次调用 - study()调用过程暂停 main 方法JVM 暂停main方法的执行保存当前的执行位置第 12 行创建study ()栈帧在虚拟机栈中压入study ()方法的栈帧执行study ()方法执行System.Out.Println(“我爱学习”)在堆内存Heap中创建字符串对象 “我爱学习”如果不存在则创建调用println方法输出方法返回Study ()方法执行完毕其栈帧从虚拟机栈中弹出销毁JVM 返回到main方法中保存的位置第 12 行之后内存变化虚拟机栈: ┌─────────────────┐ │ main 栈帧 │ ← 栈顶 (暂停状态) │ - args │ │ - PC: line 12 │ └─────────────────┘ ↓ 调用 study() ┌─────────────────┐ │ study() 栈帧 │ ← 新的栈顶 │ - 局部变量表 │ │ - PC: line 19 │ └─────────────────┘ │ main 栈帧 │ ← 被压在下面 └─────────────────┘第二次调用 - eat ()调用过程继续main方法JVM 继续执行main方法的下一条指令第 13 行暂停main方法保存当前执行位置创建eat ()栈帧在虚拟机栈中压入eat ()方法的栈帧执行eat ()方法执行System.Out.Println (我爱吃)在堆内存中创建字符串对象 “我爱吃”调用println方法输出方法返回Eat ()方法栈帧弹出销毁返回到main方法第 13 行之后第三次调用 -sleep ()调用过程继续main方法执行第 14 行暂停main方法保存当前位置创建sleep ()栈帧压入sleep ()方法的栈帧执行sleep ()方法执行System.Out.Println (我爱睡觉)在堆内存中创建字符串对象 “我爱睡觉”调用println方法输出方法返回Sleep ()方法栈帧弹出销毁返回到main方法第 14 行之后main方法结束main方法执行完毕其栈帧从虚拟机栈中弹出程序结束完整内存示意图JVM 内存结构: ┌──────────────────────────────────────┐ │ 堆内存 (Heap) │ │ ┌────────────────────────────────┐ │ │ │ String: 我爱学习 │ │ │ │ String: 我爱吃 │ │ │ │ String: 我爱睡觉 │ │ │ └────────────────────────────────┘ │ └──────────────────────────────────────┘ ┌──────────────────────────────────────┐ │ 虚拟机栈 (JVM Stack) │ │ │ │ [方法调用时的动态变化] │ │ 调用 study(): │ │ ┌─────────────┐ │ │ │ study() │ ← 栈顶 │ │ ├─────────────┤ │ │ │ main() │ │ │ └─────────────┘ │ │ │ │ study() 返回后: │ │ ┌─────────────┐ │ │ │ main() │ ← 栈顶 │ │ └─────────────┘ │ └──────────────────────────────────────┘ ┌──────────────────────────────────────┐ │ 方法区 (Method Area) │ │ ┌────────────────────────────────┐ │ │ │ FunctionDemo2 类信息 │ │ │ │ - main 方法字节码 │ │ │ │ - study 方法字节码 │ │ │ │ - eat 方法字节码 │ │ │ │ - sleep 方法字节码 │ │ │ └────────────────────────────────┘ │ └──────────────────────────────────────┘关键特点总结后进先出LIFO方法调用遵循栈的后进先出原则独立性每个方法都有自己独立的栈帧局部变量互不干扰生命周期方法调用时创建栈帧方法返回时销毁栈帧顺序执行虽然是方法调用但本质上是顺序执行的过程无返回值这三个方法都是void类型不需要在操作数栈中存储返回值由于这三个方法都是静态方法static它们随着类的加载而存在于方法区中可以直接通过类名调用不需要创建对象实例。3- 带参数的方法带参数的方法传递数据灵活带参方法的定义格式publicstatic返回值类型 方法名(参数列表){// 方法体}调用格式方法名(实际参数列表);注意形参形式参数方法定义时定义的参数实参实际参数方法调用时传递的参数带参方法的示例publicclassFunctionDemo3{publicstaticvoidmain(String[]args){add(10,20);}publicstaticvoidadd(inta,intb){System.out.println(ab);//30}}参数方法的内存图解main 方法入栈 ↓ 调用add(10,20)→ add 方法入栈形参 a10,b20↓ add 方法执行打印30↓ add 方法出栈 ↓ main 方法继续执行 ↓ main 方法出栈程序结束3.1 补充 值传递值传递方法调用时传递的参数是参数的值而不是参数的地址代码示例publicstaticvoidtestValuePass(){intnum10;change(num);System.out.println(num);// 输出10因为 Java 是值传递}publicstaticvoidchange(intn){n100;// 修改的是副本不影响原变量}4- 带返回值的方法带返回值方法A 方法产生的数据, B 方法想要使用的话, 就需要定义带返回值的方法定义格式publicstatic返回值类型 方法名(参数列表){// 方法体return返回值;}代码示例publicclassFunctionDemo4{publicstaticvoidmain(String[]args){intmaxgetMax(10,20);System.out.println(max);//20}publicstaticintgetMax(inta,intb){returnab?a:b;}}5-方法的通用格式定义方法的通用格式定义方法的定义格式实际上只有一种是拆成了三个部份让大家循序渐进的接受现在我们整合一下介绍通用定义格式publicstatic返回值类型 方法名(参数列表){方法体return返回值;}定义方法时要做到两个明确明确参数主要明确参数的类型和参数的个数明确返回值主要明确是否有返回值如果有返回值那么返回值的类型是什么返回值类型必须与方法定义的返回值类型一致没有返回值那么方法定义的时候返回值类型为 void调用方法时void类型的方法直接调用方法名即可非void类型方法必须接收返回值推荐创建一个变量将返回值赋给这个变量代码示例publicclassFunctionDemo5{publicstaticvoidmain(String[]args){// 练习1设计一个方法计算两个数之和intsumgetSum(10,20);System.out.println(和是sum);// 30System.out.println();// 练习2设计一个方法计算三个数的最小值intmingetMin(10,20,30);System.out.println(最小值是min);// 10System.out.println();// 练习3设计一个方法打印出一个人的个人信息参数姓名年龄性别地址printPersonInfo(小王,18,男,北京);// 姓名小王年龄18性别男地址北京}publicstaticintgetSum(inta,intb){intsumab;returnsum;}publicstaticintgetMin(inta,intb,intc){intmina;//判断a和b的大小inttempab?a:b;//判断temp和c的大小mintempc?temp:c;returnmin;}publicstaticvoidprintPersonInfo(Stringname,intage,chargender,Stringaddress){System.out.println(姓名name);System.out.println(年龄age);System.out.println(性别gender);System.out.println(地址address);}}6- 方法的重载方法的重载同一个类中方法名相同参数不同的方法与返回值无关重载在同一个类中定义了多个同名的方法但每个方法具有不同的参数类型或参数个数这些同名的方法就构成了重载关系 (Overload)方法重载的作用提高代码的复用性减少代码的编写代码示例publicclassMethodToReloadDemo1{publicstaticvoidmain(String[]args){// 案例提供四个方法计算 2 个整数、2 个小数相加3 个小数相加3 个整数相加intsum1add(10,20);System.out.println(和是sum1);// 30System.out.println();doublesum2add(10.1,20.2);System.out.println(和是sum2);// 30.3System.out.println();doublesum3add(10.1,20.2,30.3);System.out.println(和是sum3);// 60.6System.out.println();intsum4add(10,20,30);System.out.println(和是sum4);// 60}publicstaticintadd(inta,intb){returnab;}publicstaticdoubleadd(doublea,doubleb){returnab;}publicstaticdoubleadd(doublea,doubleb,doublec){returnabc;}publicstaticintadd(inta,intb,intc){returnabc;}}⚠️ 注意仅返回值类型不同不构成重载示例代码publicclassMethodToReloadDemo2{publicstaticvoidmain(String[]args){// 调用两个整数相加的方法intresult1add(10,20);System.out.println(两个整数相加result1);// 30// 调用三个整数相加的方法intresult2add(10,20,30);System.out.println(三个整数相加result2);// 60// 调用两个小数相加的方法doubleresult3add(10.5,20.3);System.out.println(两个小数相加result3);// 30.8// 调用两个字符串拼接的方法Stringresult4add(Hello,World);System.out.println(两个字符串拼接result4);// HelloWorld}publicstaticintadd(intx,inty){returnxy;}publicstaticintadd(intx,inty,intz){returnxyz;}publicstaticdoubleadd(doublex,doubley){returnxy;}publicstaticStringadd(Stringx,Stringy){returnxy;}/** * ⚠️ 错误示例仅返回值类型不同不构成重载 * 下面这样的代码会编译失败 * 原因方法重载只看参数列表参数个数、类型、顺序与返回值类型无关 */// public static int add(int x, int y) { return x y; } // ❌ 错误// public static double add(int x, int y) { return x y; } // ❌ 错误} 文章到这里就结束啦我正在学习AI 智能应用开发后续会持续更新 Java 基础、AI 开发实战等干货笔记。如果你想和我一起系统学习、获取完整学习资料欢迎扫码关注我的微信公众号「木圭学编程」**公众号里会同步更新全套学习笔记还有不定期福利和学习答疑期待和你一起成长✨

相关文章:

告别代码臃肿!Java 基础语法 02:方法定义、调用与实战

👋 你好呀!我是正在学习 AI 智能应用开发的学习者。 上一篇我们搞定了 变量、数据类型、运算符,已经能写简单的运算逻辑。 但代码一多就会变得又长又乱、重复度极高 —— 这时候就必须学会Java 方法! 方法是 Java 最基础、最重要的…...

ros2简单的案例,一个节点采集图片,一个节点推理

先说一下为什么要学ros2,:首先他的通信非常快,而且可以多语言编程。比如说,如果要采集一张,然后多个模型推理,然后结果汇总,如果就单纯的用python的多线程,多进程,不仅速度慢&#x…...

QClaw 使用教程 亲测体验:腾讯亲儿子版“龙虾”,微信一句话就能远程操控电脑!(附完整截图+0门槛部署)

大家好,我是 BUG猿,专注 AI 大模型本地部署、省钱白嫖、实用工具踩坑的程序员。最近腾讯电脑管家悄然放出了 QClaw(官方定位:随时随地,微信一下,QClaw帮你高效干活),直接把火爆的开源…...

2026年必看!水浸传感器选购避坑指南,守护家庭安全

在2026年的今天,随着智能家居与工业自动化程度的不断加深,水浸传感器作为预防泄漏风险的第一道防线,其重要性日益凸显。无论是家庭中的地下室、厨房、阳台,还是数据中心、精密厂房等关键设施,一次未被及时发现的水浸事…...

一个例子快速搞懂净现值(NPV)

场景你现在要开一个小项目:今天立刻投:1000 元1 年后能收回:1200 元银行利率(折现率):5%问:这个项目到底赚不赚?值不值得做?我们来算 净现值 NPV。第一步:先算…...

win11配置java环境变量_主要是位置不好找啊_win7_win10好找---AI大模型应用探索0006

在设定画面,设置画面找到,这个可以看到有个系统详细设置可以看到有个环境变量,打开然后找到系统变量,然后:配置 CLASSPATH%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar然后再去配置:JAVA_HOMED:\2026…...

毕设程序java在线作业管理系统 基于Java的智能化作业提交与评阅平台 Java驱动的数字化课业管理与交互系统

毕设程序java在线作业管理系统6u09wm4d (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着教育信息化进程的不断深入,传统纸质作业管理模式已难以满足现代教学的多元…...

Day50:2026年3月18日打卡

一、上机打卡1.1 回形取数1.1.1 题目回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。输入说明:输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接…...

K6性能测试及生成Html压测报告

一、引言: k6是一款开源负载测试工具,由Grafana Labs开发维护,专注于现代云环境和微服务架构 的高并发压测。它采用Go语言编写,使用JavaScript(ES6)作为脚本语言。还提到它特别适合CI/CD集成和自动化性能测试。 二、下载安装&am…...

低空运行技术研究报告

检索日期:2026-03-18 检索范围:SCI/EI/中文核心期刊/行业报告/预印本【研究进展】 一、代表性最新研究成果 1. 《A Survey of Security Challenges and Solutions for UAS Traffic Management (UTM) and small Unmanned Aerial Systems (sUAS)》 来源&am…...

面试必杀技:彻底搞懂 JVM 内存模型与区域划分(上篇)

在 Java 面试中,JVM(Java 虚拟机)是区分中高级开发者的分水岭。很多同学对 JVM 感到恐惧,觉得它只是一堆干巴巴的概念。其实,只要把它当成一个“虚拟的操作系统”,一切就豁然开朗了。 本系列将分为上、中、…...

从“亡羊补牢”到“规则先行”:金仓数据库的主动防御之道

在数字化转型的浪潮中,数据已成为企业的核心资产。然而,SQL注入攻击如同潜伏在阴影中的“不速之客”,时刻威胁着数据库的安全。即使开发团队严守预编译、输入过滤等防线,遗留代码、第三方组件的漏洞或人为疏忽仍可能给攻击者可乘之…...

四六级 | 2026年英语四六级视频课程

2026上半年四六级笔试/口试时间已定 📌 考试时间 ▪ 笔试:6月13日 ▪ 口试:5月23日—5月24日 📌 准考证打印 ▪ 口试准考证:5月19日 9:00起 ▪ 笔试准考证:6月5日 9:00起 四六级 | 2026年英语四六级视…...

OpenClaw Windows 10 WSL2 安装与配置指南+飞书接入(使用腾讯云Coding Plan)

文章目录基础环境第一阶段:安装 WSL2 环境1.1 开启 WSL21.2 迁移 WSL2 到非 C 盘(推荐)1.3 启用 systemd1.4 WSL 固定 DNS1.4.1 关闭 WSL 自动生成 DNS1.4.2 删除 systemd 生成的 resolv.conf1.4.3 创建新的静态 DNS 文件1.4.4 重启 WSL1.4.5…...

20260318_203310_AI大模型之RAG(向量库milvus实现)

介绍概念:RAG 检索增强生成Retrieval-Augmented Generation 打个比方 普通 AI:像闭卷考试,只会脑子里记的东西,容易记错、过时。 RAG AI:像开卷考试,先去翻你给的课本 / 文档,找到相关内容&am…...

固定资产清查别敷衍!账实对不上、资产流失,全是清查没做细

说起企业资产管理,很多人盯着折旧核算,却忽略了最基础的固定资产清查。这项工作看似繁琐,却是堵住资产流失、校准财务数据、规避税务与内控风险的关键一步,不管是中小企业还是大型公司,定期做规范清查,才能…...

选艺术字体AI工具这件事,别只盯出图快慢

在日常门店运营中,活动海报的艺术字体设计需要兼顾效率和后续修改空间。最近一次促销活动,首版物料我选择了千图的AI艺术字体工具,主要看重其AI海报可编辑和同款生成功能——能够让AI先产出风格方向,再进一步用其抠图、放大、消除…...

Edge浏览器 about:blank 问题修复

打开新标签出现 about:blank 空页面 修改-> 修复 Get-AppxPackage MicrosoftEdge | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "(_.InstallLocation)\AppXManifest.xml"}命令含义解析 这段PowerShell命令的核心作用是重新注册/修复微软Edge…...

根据ai创建校园管理系统——MySQL数据库设计与建立

native效果展示一.DDL语句-- -- 校园二手交易系统 - DDL数据定义语句 -- -- 1. 初始化设置 SET FOREIGN_KEY_CHECKS 0; -- 临时关闭外键检查,避免删表报错 SET NAMES utf8mb4;-- 2. 创建并使用数据库 CREATE DATABASE IF NOT EXISTS campus_second_hand_trade D…...

应用数学新时代的到来

以下内容转载自微信公众号“数学家”,仅作分享 原文链接:https://mp.weixin.qq.com/s/qbnHosCL13TaPSQ9DRih5w 鄂维南,1963年9月生于江苏省靖江市,数学家,中国科学院院士,北京大学、普林斯顿大学教授、北京…...

把AIGC率降到个位数有多爽?2026十款主流免费降AI工具天花板实测

自从2024年各大高校引入AI检测系统后,无数学生陷入了"AI降AI"的死循环:用AI写论文效率高,但查出来就完蛋;手写太慢,赶不上ddl。于是,降低ai率成了比查重更棘手的难题。今天这篇文章,我…...

第6篇:中文语言 学会华夏本源语言能做什么?

第6篇:学会华夏本源语言能做什么? 作者: 大号:华夏之光永存(道级解读) 小号:华夏之光永存小号(术级解读) 核心简介: 道:领域永恒不变的本质规律…...

HTML学习日记——DAY01(基本标签)

今天我正式步入web开发中的html的学习了&#xff0c;今天主要针对HTML的基本标签展开了学习&#xff1a;1.HTML初始的一个标签组成&#xff1a;<!--声明当前文档的类型是html--> <!DOCTYPE html> <!--设置网页语言--> <html lang"en"> <!…...

港中文大学发布PIRA-Bench:AI助手告别被动等待

这项由香港中文大学多媒体实验室、南开大学和华为研究院联合完成的突破性研究发表于2026年3月&#xff0c;论文编号为arXiv:2603.08013v1&#xff0c;标志着人工智能助手从被动响应向主动预测的重大转变。当前的图形用户界面智能助手就像一个严格按指令工作的管家。每当你想让它…...

2026省选联考游记

分数481512150090。 Day1 首先&#xff0c;先花了1个小时时间想出了T1的一个n^3写法&#xff0c;然后&#xff0c;耗时2 ~ 3小时写出该做法&#xff0c;试图用FFT或NTT优化&#xff0c;但忘了FFT如何打&#xff0c;于是花0.5 ~ 1小时写出后两题暴力&#xff0c;然后剩余时间未想…...

02 python阶段大纲介绍

环境搭建安装python解释器 目的 解释python代码&#xff0c;例如print(“hello world”)版本 3.8x及以上版本安装Anaconda数据科学家 pythons解释器python库安装IDE工具 Pycharm , 版本必2023.x及以上基础语法 函数容器类型相关文件操作相关异常处理扩展—递归包和模块 项目 综…...

rchtxchs.dll文件丢失找不到 免费下载修复方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…...

2025 CCF 非专业级软件能力认证 解析

拼数题目描述小 R 正在学习字符串处理。小 X 给了小 R 一个字符串 s&#xff0c;其中 s 仅包含小写英文 字母及数字&#xff0c;且包. 含. 至. 少. 一. 个. 1 ∼ 9 中. 的. 数. 字. 。小 X 希望小 R 使用 s 中的任. 意. 多. 个. 数 字&#xff0c;按任. 意. 顺. 序. 拼成一个正…...

算法设计与分析-习题9.4

目录 1. a.对于下面的数据构造一套哈夫曼编码&#xff1a; b.用a中的编码对文本ABACABAD进行编码。 c.对于 100010111001010用a中的编码进行解码。 2.出于数据传输的目的&#xff0c;我们常常需要一套码长差异最小的编码(在具有相同平均长度的编码中)。针对以下数据构造哈…...

金仓数据库在文档型数据迁移中的实践复盘:从MongoDB协议兼容到政务系统平滑替换

金仓数据库在文档型数据迁移中的实践复盘&#xff1a;从MongoDB协议兼容到政务系统平滑替换 凌晨2:17&#xff0c;监控告警再次触发——电子证照系统“亮证查询”接口响应超时率突破8%&#xff0c;MongoDB从库CPU使用率持续高于95%&#xff0c;慢查询日志中频繁出现多层嵌套的…...