1. 方法是什么?
在 Java 中,方法是属于某个类或接口的、有名字的可执行代码块,用来完成特定功能,并可选择向调用者返回结果。它是 Java 中功能逻辑的最小复用单元,是实现代码复用、行为抽象的核心手段。
💡通俗理解:
方法就像厨房里的菜谱。菜谱有固定名字(方法名)、需要指定原料(参数)、有一步步的操作步骤(方法体)、最后产出一道菜(返回值)。把常用的烹饪步骤写成菜谱,以后要做菜时直接喊菜谱名就行,不用每次重新想怎么做。
2. 为什么需要方法?
方法本质是软件工程「封装、复用、模块化」思想在代码中的落地,主要解决 5 个核心问题:
消除重复代码:相同逻辑只写一次,多处可直接调用,符合 DRY(Don't Repeat Yourself)原则;
行为封装隔离:调用者只需要关心方法“能做什么、需要传什么、返回什么”,不需要关心内部怎么实现,降低使用门槛;
拆解复杂问题:把庞大复杂的业务逻辑拆成多个小方法,每个方法只做一件事,让代码结构清晰,易读易调试;
便于独立测试:每个方法可以单独做单元测试,快速定位问题,不用跑完整程序;
统一维护迭代:功能逻辑集中在一个方法里,后续修改优化只需改一处,避免多处修改遗漏、逻辑不一致。
💡通俗理解:
如果每次炒菜都临时想步骤,费时还容易出错。把“炒菜步骤”写成菜谱,以后直接按菜谱操作,清晰高效。菜谱还能分享给别人用,这就是复用。
3. 方法的完整语法
[访问修饰符] [非访问修饰符] 返回类型 方法名(参数类型1 参数名1, 参数类型2 参数名2, ...) [throws 异常类型] { // 方法体:具体执行的逻辑代码 [return 返回值;] }3.1 修饰符
修饰符分为两类:访问修饰符(控制谁能调用这个方法,实现封装)和非访问修饰符(给方法附加特殊属性,适配不同场景)。
(1)访问修饰符(共 4 种)
修饰符 | 本类内部 | 同包其他类 | 不同包子类 | 不同包无关类 | 通俗理解 |
| ✅ | ✅ | ✅ | ✅ | 公开菜谱,任何人都能用 |
| ✅ | ✅ | ✅ | ❌ | 内部菜谱,本店员工和加盟分店能用 |
不写(默认/包私有 package-private) | ✅ | ✅ | ❌ | ❌ | 门店内部菜谱,只有同店员工能用 |
| ✅ | ❌ | ❌ | ❌ | 私家秘制菜谱,只有自己能用 |
(2)非访问修饰符(常用 5 种)
修饰符 | 核心作用 | 关键规则 | 通俗理解 |
| 静态方法,属于类本身 | 直接通过类名调用,不能直接访问实例成员,不能用 | 速食菜谱,不需要有厨房就能做 |
| 最终方法,不能被子类重写 | 方法逻辑固定,不允许修改;构造方法不能用 | 官方标准菜谱,不能私自改配方 |
| 抽象方法,只有声明没有方法体 | 没有大括号,以分号结尾;必须定义在抽象类或接口中 | 菜品研发方案,只有要求没落地,得交给后厨落地 |
| 同步方法,同一时间只能一个线程执行 | 实例方法锁当前 | 厨房唯一的烤箱,同一时间只能一个人用 |
| 本地方法,方法体由 C/C++ 等底层语言实现 | 没有 Java 代码的方法体,通过 JNI 调用底层系统库 | 进口设备操作,核心逻辑由底层机器实现 |
⚠️ 重要注意:
default关键字仅用于接口中的默认方法,不属于类方法的修饰符,不要用在普通类中;
abstract不能和private、static、final、native同时修饰一个方法,会直接编译报错(二者的核心逻辑冲突:抽象要求被子类重写,而这些修饰符都会禁止/破坏重写)。具体的抽象方法、重写..明天具体说说
3.2 返回类型
方法执行结束后返回给调用方的数据类型,分两种:
有返回值:写具体的数据类型(基本类型、引用类型均可),方法内必须通过
return返回对应类型的结果;无返回值:必须写关键字
void,可以写return;提前结束执行,但不能返回具体数值。
💡通俗理解:
返回类型就是菜谱最后出锅的成果——可以是一道菜(int)、一碗汤(double),或者什么都不产出(void,比如只是打扫厨房)。
3.3 方法名
方法的唯一标识,遵循小驼峰命名(首字母小写,后续单词首字母大写,如getUserName),通常以动词开头,见名知意。
💡通俗理解:
方法名就是菜谱的标题,一看就知道是“做宫保鸡丁”还是“煮番茄蛋汤”。
3.4 参数列表
调用方法时需要传入的输入数据,写在小括号内,0 个或多个,多个用逗号分隔。
形参:方法定义时的参数,相当于占位符,只有调用时才分配内存;
实参:调用方法时实际传入的值/变量。
Java 中所有参数都是值传递,即传入的都是副本,不是原始数据本身。
💡通俗理解:
参数就是菜谱需要的原料(鸡蛋、面粉)。你把原料清单给帮厨,他按清单备料,改动的是备好的那份原料,不会动你仓库里的原始库存。
3.5 方法体
大括号{}包裹的代码块,是方法的具体执行逻辑,包含变量定义、运算、流程控制等语句,是方法的核心。
💡通俗理解:
方法体就是烹饪步骤本身——先倒油、再放菜、翻炒、调味……按顺序一步步执行。
3.6 异常声明
通过throws关键字声明方法执行过程中可能抛出的异常类型,把异常抛给调用方处理,多个异常用逗号分隔。
规则:受检异常(Checked Exception)必须声明,运行时异常(RuntimeException)可声明也可不声明。
易混区分:
throws:写在方法声明处,用来声明方法可能抛出的异常类型;
throw:写在方法体内,用来手动抛出具体的异常对象。
💡通俗理解:
菜谱上标注“小心烫伤”“注意火候防止糊锅”,提前提醒你做菜时有风险,得做好应对准备,可以理解为目前遇到了一个困难但是自己解决不了或者不想解决,于是你就把问题抛给了你的领导或者要用你这个方法的同事,让他们解决问题。
3.7 return 语句
有返回值的方法:
return 返回值;会立即结束方法执行,并把结果返回给调用方;void 方法:可写
return;提前结束方法,不能跟具体数值。
芜湖~ 明天继续,这几天在调整内容展示的风格,睡不着就起来学习吧!