元数据卡
- 前置知识:变量与类型(第2章)、控制流(第4章)
- 预计时间:15 分钟
- 阅读模式: 轻松入门
- 完成标志:能够写出带参数和返回值的方法
本章分层
- 必读:方法定义与调用、参数传递、返回值
- 选读:
void与返回类型的抉择- 进阶:无
你的进度
老陈的兵器铺里今天特别安静。你推门进去,看见他正在炉前凝神——不是在打铁,是在等你。
"你学会了变量,学会了条件和循环,"他头也不抬,"但你只会把代码写成一整块——从上到下,像竹竿一样。如果你想做两件不一样的事,你得把同样的代码写两遍。"
"一味蛮干,"他抬起头,"你见过哪个铁匠打一把剑要从挖矿开始?"
这章的任务就是学会拆解——把一个大任务拆成有名字的小任务,每个小任务只管一件事,接收它需要的东西,返回它做出的成果。
第一幕:你需要一个"动作"
假设你要显示三次欢迎信息——三遍同样的结构。真正的问题不是循环,是你没法把一个"动作"打包成一个有名字的东西。
方法(method)就是那个"有名字的东西"。
第二幕:定义你的第一个方法
打开你的编辑器。别复制,自己打一遍——手打才能感觉到节奏:
public class Blacksmith {
public static void main(String[] args) {
showBanner();
System.out.println("老陈师傅正在打铁。");
showBanner();
}
// ↓↓↓ 看你师傅这里 ↓↓↓
static void showBanner() {
System.out.println("====== 铁匠铺 ======");
System.out.println(" 老陈在此");
System.out.println("====================");
}
}语言:Java 21 如何运行:javac Blacksmith.java && java Blacksmith预期输出:
====== 铁匠铺 ======
老陈在此
====================
老陈师傅正在打铁。
====== 铁匠铺 ======
老陈在此
====================你只是在 main 里调用了两次 showBanner(),程序就跑到了另一个地方,执行里面的三条 println,再回来。
方法的基本语法:
static void 方法名() {
// 你想做的事
}static:先记住——"这个方法属于类本身,不需要创建对象就能调用"void:这个方法不返回任何东西- 方法名:小驼峰命名,动词开头:
showBanner、calculateDamage、isReady
Python 差异:
def show_banner():就行,没有static和返回类型声明,方法名用蛇形命名。
第三幕:传参数进去
"展示个横幅有啥用?你得能告诉我——给谁打、打什么。"
public class Forge {
public static void main(String[] args) {
craftSword("铁剑", 3);
craftSword("钢刀", 5);
craftSword("秘银匕首", 2);
}
static void craftSword(String name, int days) {
System.out.println("开始打造:" + name);
System.out.println("预计需要 " + days + " 天");
System.out.println(name + " 打造完成!");
System.out.println("---");
}
}语言:Java 21 如何运行:javac Forge.java && java Forge预期输出:
开始打造:铁剑
预计需要 3 天
铁剑 打造完成!
---
开始打造:钢刀
预计需要 5 天
钢刀 打造完成!
---
开始打造:秘银匕首
预计需要 2 天
秘银匕首 打造完成!
---形参与实参:craftSword(String name, int days) 声明了两个"形参"(parameter)。你调用时传进去的值("铁剑", 3)叫"实参"(argument)。形参就像在方法入口处声明了两个临时变量——调用时被赋值为你传进来的值。
第四幕:返回值——你做出东西得还给我
把矿石扔进去炼,炼完了你得把剑拿回来。
public class Forge {
public static void main(String[] args) {
String sword1 = forgeSword("铁", 3);
String sword2 = forgeSword("钢", 5);
System.out.println("你得到了:" + sword1);
System.out.println("你得到了:" + sword2);
}
static String forgeSword(String material, int quality) {
String result = quality >= 4
? "精良" + material + "剑"
: "普通" + material + "剑";
return result;
}
}如何运行:javac Forge.java && java Forge预期输出:
你得到了:普通铁剑
你得到了:精良钢剑void 变成了 String——"这个方法运行完毕后,会还给你一个 String 类型的值"。然后在方法体内,你需要 return 那个值。return 做了两件事:
- 计算出结果并返回给调用者
- 立即结束方法——后面的代码不会执行
static String checkAge(int age) {
if (age < 18) {
return "未成年,不能领取冒险执照";
// System.out.println("这行永远不会执行"); ← 编译器会报错
}
return "欢迎领取冒险执照";
}Python 差异: 返回类型只是提示,不强制。Java 是编译期强制检查的。
旅人笔记
方法让你把一段逻辑打包成一个有名字的小任务。参数是输入,返回值是输出。记住一句话:一个方法做一件事。
→ 下一站:调用栈
你已经知道方法可以调方法。但你有没有想过——调用的过程中,电脑是怎么记住"我走到哪了"的?每次调用时,变量存在哪里?下一节,调用栈给你答案。