Java从入门到“放弃”(精通)之旅——方法的使用⑤

Java从入门到“放弃”(精通)之旅🚀——方法的使用⑤

📖引言:

在编程领域,代码如同精密的齿轮相互咬合驱动程序运转。随着项目规模渐长,重复的代码片段如同冗余的齿轮,不仅增加负重,还易导致故障。

方法,恰似能将特定功能齿轮组封装起来的黑匣子。把重复执行的代码逻辑收纳其中,对外仅露出简洁的调用接口。需要执行相应功能时,只需精准呼唤方法之名,就如同转动黑匣子外的把手,内部精巧的齿轮组便会有序运转,高效输出预期结果。这将复杂的功能模块化、抽象化,提升代码的可读性、可维护性与复用性,此即Java中方法的本质所在。


一、方法基础:告别"复制粘贴"的苦日子

1. 方法定义:你的第一个代码模板

Java定义方法的语法:

public static 返回值类型 方法名(参数类型 参数名) {// 方法体(你的骚操作)return 返回值; // 如果有的话
}

举个栗子🌰:判断闰年

public static boolean isLeapYear(int year) {return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}

关键点速记

  • public static:表示公开属性并且是静态的
  • 方法名:建议动词+名词,比如calculateSum(千万别用a1test2这种名字)
  • 参数:像点奶茶时的选项——要加珍珠吗?要几分糖?

2. 方法调用:让代码"自己动"

举个栗子🌰
当你写下add(1, 2)JVM在幕后做了这些:

  1. 找到add方法地址(找到收藏的奶茶店)
  2. 12传给方法(提交点单)
  3. 执行方法体(店员做奶茶)
  4. 返回结果(奶茶送到家)

代码示例

public static void main(String[] args) {System.out.println("2+3=" + add(2, 3)); // 输出:5
}public static int add(int a, int b) {return a + b;
}

在这里插入图片描述


二、方法进阶:玩转参数与返回值

1. 形参 vs 实参:分清"菜谱"和"食材"

  • 形参:方法定义时的参数(就像菜谱里的"适量")
  • 实参:方法调用时传入的值(就像实际放的盐)
    在这里插入图片描述
// 形参:a, b
public static int add(int a, int b) {return a + b;
}public static void main(String[] args) {int x = 2, y = 3;add(x, y); // 实参:x, y
}

2. 值传递的陷阱:为什么交换失败了?

public static void swap(int a, int b) {int temp = a;a = b;b = temp; // 这里交换的只是形参!
}

原因:Java是值传递,方法内操作的是参数的拷贝。想真正交换要等学到了数组

3.没有返回值的方法:void

方法的返回值是可以选择的,当没有返回值时,返回值类型必须写成void
代码示例:

public static void main(String[] args) { int a = 10; int b = 20;print(a, b); 
}
public static void print(int x, int y) {System.out.println("x = " + x + " y = " + y); 
} 

三、方法重载:Java版的"一词多义"

1. 为什么需要重载?

想象去奶茶店:

  • 你:“要一杯奶茶”
  • 店员:“???(冰的热的?加糖吗?大杯中杯?)”

代码版悲剧

add(1, 2); // OK
add(1.5, 2.5); // 报错:所需参数是int,却传递double

2. 重载的正确打开方式

规则:方法名相同,参数列表不同(类型、个数、顺序)

// 整型加法
public static int add(int a, int b) { return a + b; }// 浮点加法 
public static double add(double a, double b) { return a + b; }// 三数相加
public static int add(int a, int b, int c) { return a + b + c; }

注意返回值类型不同不算重载!下面这个会报错:

public static int add(int a, int b) {...}
public static double add(int a, int b) {...} // 编译错误

四、递归:程序员的"套娃"艺术

生活中的故事
从前有坐山,山上有座庙,庙里有个老和尚给小和尚将故事,讲的就是:
"从前有座山,山上有座庙,庙里有个老和尚给小和尚讲故事,讲的就是:
“从前有座山,山上有座庙…”
“从前有座山……”
在这里插入图片描述

1. 递归三要素

  • 出口条件:什么时候结束套娃
  • 递推公式:如何把问题拆解成子问题
  • 调用自身:我调用我自己

阶乘示例

public static int factorial(int n) {if (n == 1) { // 出口条件return 1;}return n * factorial(n - 1); // 递推公式 + 调用自身
}

2. 递归执行过程(以factorial(5)为例)

factorial(5)
│
├─ 5 * factorial(4)
│     │
│     ├─ 4 * factorial(3)
│     │     │
│     │     ├─ 3 * factorial(2)
│     │     │     │
│     │     │     ├─ 2 * factorial(1)
│     │     │     │     │
│     │     │     │     └─ return 1
│     │     │     │
│     │     │     └─ return 2
│     │     │
│     │     └─ return 6
│     │
│     └─ return 24
│
└─ return 120

在这里插入图片描述

3. 递归的坑:斐波那契数列的悲剧

public static int fib(int n) {if (n <= 2) return 1;return fib(n-1) + fib(n-2); // 重复计算爆炸!
}

改进方案:用循环或记忆化搜索


五、结语:方法使用的"三大纪律"

  1. 不要重复造轮子:能用方法就别复制粘贴
  2. 命名要见名知意:别用a1func2这种名字
  3. 单一职责原则:一个方法只做一件事

记住:好的方法设计,能让你的代码变得简洁高效!


在这里插入图片描述
JavaSE往期专栏

  • Java从入门到“放弃”(精通)之旅——启航①
  • Java从入门到“放弃”(精通)之旅——数据类型与变量②
  • Java从入门到“放弃”(精通)之旅——运算符③
  • Java从入门到“放弃”(精通)之旅——程序逻辑控制④
    在这里插入图片描述

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

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

相关文章

鸿蒙NEXT开发格式化工具类(ArkTs)

import { i18n } from kit.LocalizationKit;/*** 格式化工具类* 提供电话号码格式化、归属地查询、字符转换等功能。* author: 鸿蒙布道师* since: 2025/04/14*/ export class FormatUtil {/*** 判断传入的电话号码格式是否正确。* param phone - 待验证的电话号码* param coun…

[Python基础速成]2-模块与包与OOP

上篇➡️[Python基础速成]1-Python规范与核心语法 目录 Python模块创建模块与导入属性__name__dir()函数标准模块 Python包类类的专有方法 对象继承多态 Python模块 Python 中的模块&#xff08;Module&#xff09;是一个包含 Python 定义和语句的文件&#xff0c;文件名就是模…

OSI参考模型和TCP/IP模型

1.OSI参考模型 OSI模型&#xff1a; OSI参考模型有7层&#xff0c;自下而上依次为物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;会话层&#xff0c;表示层&#xff0c;应用层。&#xff08;记忆口诀&#xff1a;物联网叔会用&#xff09;。低…

linux Shell编程之循环语句(三)

目录 一. for 循环语句 1. for语句的结构 2. for 语句应用示例 (1) 根据姓名列表批量添加用户 (2) 根据 IP 地址列表检查主机状态 二. 使用 while 循环语句 1. while 语句的结构 2. while 语句应用示例 (1) 批量添加规律编号的用户 (2) 猜价格游戏 三. until 循环语…

最新扣子实战教程,利用扣子平台通过在线表格记录,批量生图,再也不要一条条的粘贴提示词了

1、功能描述 大家好&#xff0c;我是涛涛。今天我要给大家讲解如何在扣子平台上对接飞书电子表格。由于多维表格相对复杂&#xff0c;而很多业务场景其实只需要电子表格就能满足&#xff0c;因此今天我们将演示如何在扣子平台上读取飞书电子表格并批量生成图片。 先看效果&am…

java -jar指定类加载

在 Java 中&#xff0c;使用 java -jar 命令运行 JAR 文件时&#xff0c;默认会加载 JAR 文件的 MANIFEST.MF 文件中指定的 Main-Class。如果你想在运行时指定一个类来加载&#xff0c;可以通过以下方式实现&#xff1a; 方法 1&#xff1a;直接指定类路径和类名 如果你不想使用…

多模态思维链(Multimodal Chain of Thought, MCoT)六大技术支柱在医疗领域的应用

多模态思维链(Multimodal Chain of Thought, MCoT)通过整合文本、图像、视频等多模态数据,结合逻辑推理与深度学习技术,在医疗领域展现出强大的应用潜力。其六大技术支柱在医疗场景中的具体应用如下: 一、推理构建视角:医学诊断的流程优化 MCoT通过多模态推理链生成技术…

从文本到视频:基于扩散模型的AI生成系统全解析(附PyTorch实现)

当语言遇见动态视觉 "用文字生成电影场景"曾是科幻作品中的幻想&#xff0c;如今借助扩散模型&#xff08;Diffusion Models&#xff09;正逐步成为现实。本文将手把手带你实现一个创新的文本到视频生成系统&#xff0c;通过深度解析扩散模型原理&#xff0c;结合独…

科普:如何通过ROC曲线,确定二分类的“理论阈值”

在二分类问题中&#xff0c;已知预测概率&#xff08;如逻辑回归、神经网络输出的概率值&#xff09;时&#xff0c;阈值的选择直接影响分类结果&#xff08;正/负样本判定&#xff09;。 一、实践中的阈值选择方法 1. 基于业务目标的调整 最大化准确率&#xff1a;适用于样…

2025ArkTS基础UI(一)——Column、Row、Text、Button组件

2025ArkTS基础UI(一)——Column、Row、Text、Button组件 前言 臭宝们&#xff0c;今天我们来学习ArkTS基础UI组件的使用&#xff0c;其中包括&#xff1a; Column、Row、Text、Button组件。 知识点 Colum、Row组件用于布局&#xff0c;Text、Image、Button组件用于展示。 …

强化学习:基于价值的方法做的是回归,基于策略的方法做的是分类,可以这么理解吗?

在强化学习领域,基于价值的方法(Value-based Methods)和基于策略的方法(Policy-based Methods)是两种核心范式。本文将从目标函数、优化机制以及与机器学习任务的类比角度,探讨这两种方法是否可以被分别理解为回归和分类任务,并深入分析其内在逻辑。 一、基于价值的方法…

折叠屏手机:技术进步了,柔性OLED面板测试技术需求跟上了吗?

全球智能手机市场陷入创新焦虑&#xff0c;折叠屏手机被寄予厚望&#xff0c;2023 年出货量同比增长 62%。但在供应链技术狂欢背后&#xff0c;存在诸多问题。消费端数据显示&#xff0c;用户使用频率低&#xff0c;定价策略反常。产业链重构虽让部分企业获利&#xff0c;却推高…

前端在线工具 CodePen 和 JSFiddle

前端在线工具 CodePen 和 JSFiddle CodePen 概述&#xff1a;CodePen 是一个社交化的前端开发环境&#xff0c;用户可以在这里创建代码片段&#xff08;称为“Pens”&#xff09;&#xff0c;分享和展示自己的前端开发作品。 主要功能&#xff1a; 实时预览&#xff1a;用户在…

Redis-场景缓存+秒杀+管道+消息队列

缓存一致性 1.两次更新 先更新数据库&#xff0c;再更新缓存&#xff1b;先更新缓存&#xff0c;再更新数据库&#xff1b; 出现不一致问题场景&#xff1a; 先更新数据库&#xff0c;再更新缓存&#xff1b; 先更新缓存&#xff0c;再更新数据库&#xff1b; 两次更新的适…

[Windows] 字体渲染 mactype v2025.4.11

[Windows] 字体渲染 mactype 链接&#xff1a;https://pan.xunlei.com/s/VONeCUP2hEgO5WIQImgtGUmrA1?pwdyruf# 025.4.11 Variable font support 可变字体支持已到来。 本版本将可变字体支持扩展到所有 GDI 应用程序。 所有 win32 程序中的字体&#xff0c;如 Noto Sans、Se…

【C++】深拷贝与浅拷贝

重开也不是不可能 ~.~ 浅拷贝 #include <iostream> #include <cstring>class ShallowCopyExample { public:int m_nValue;int* m_pData;// 构造函数&#xff0c;初始化指针成员ShallowCopyExample(int value) : m_nValue(value) {m_pData new int(0);*m_pData va…

SpringBoot企业级开发之【用户模块-更新用户头像】

功能如下所示&#xff1a; 我们先看一下接口文档&#xff1a; 为什么头像是一串字符串呢&#xff1f;因为我们是将头像图片放到第三方去存储&#xff0c;比如&#xff1a;阿里云等 开发思路&#xff1a; 实操&#xff1a; 1.controller 注意!这里使用【PatchMapping】注解…

vue3+vite+js项目引入electron构建跨平台桌面应用

1.准备工作 ① 必要安装node.js、vue、vite、electron、pnpm 本人用的node版本v18.17.1、vue版本^3.4.19、vite版本^3.2.7、electron版本^35.1.4 ② 开发调试打包安装 "devDependencies": {"concurrently": "^9.1.2","electron-builder&…

(51单片机)串口通讯(串口通讯教程)(串口接收发送教程)

前言&#xff1a; 今天有两个项目&#xff0c;分别为&#xff1a; 串口接收: 串口发送&#xff1a; 如上图将文件放在Keli5 中即可&#xff0c;然后烧录在单片机中就行了 烧录软件用的是STC-ISP&#xff0c;不知道怎么安装的可以去看江科大的视频&#xff1a; 【51单片机入门…

《汽车制造技术基础》第一次作业

作业内容 查阅相关资料&#xff0c;谈谈对汽车制造技术的发展的理解。 可以是关于汽车的先进制造技术 或 汽车先进制造技术 与 制造理念的发展趋势 或 汽车先进制造技术对环境与可持续发展的影响等。 以下从技术突破、制造理念转型及环境影响三个维度展开对汽车制造技…