
一、方法
1.1 什么是方法
📚 定义:
方法(Method) 是一段可重复执行的代码块,用于实现特定功能或行为。它是 Java 程序中组织逻辑、提高复用性和模块化的重要手段。
💡 类比:
- 就像厨房里的"菜谱",每道菜对应一个方法;
- 调用方法就像"做菜",传入食材(参数),得到成品(返回值)。
核心作用:
- 封装功能:将复杂逻辑隐藏起来;
- 提高复用性:避免重复写相同代码;
- 增强可读性:通过方法名表达意图;
- 支持参数传递与返回结果。


1.2 最简单的方法定义和调用


[修饰符] 返回值类型 方法名([参数列表]) {
// 方法体:执行的具体代码
[return 返回值;]
}
1.2.1 最简单的方法定义和调用
方法名要遵守骆驼峰命名法


1.2.2 带参数的方法定义和调用





1.2.3 带返回值的方法定义和调用






1.3 方法的注意事项


- 方法必须定义在类内部;
- 如果方法没有返回值,不能写
return表达式(但可以写return;提前退出); - 参数是形式参数 (形参),实际调用时传入的是实际参数(实参)。
1.4 方法的重载
📚 定义:
方法重载 是指在一个类中可以定义多个同名但参数不同的方法 。Java 会根据调用时的参数类型和个数自动选择合适的方法。
✅ 重载规则:
- 方法名必须相同;
- 参数列表必须不同(类型、个数、顺序至少有一个不同);
- 返回值类型不影响重载判断;
- 访问修饰符和异常声明不影响重载。


java
public class MathUtils {
// 重载1:两个整数相加
public int add(int a, int b) {
return a + b;
}
// 重载2:两个浮点数相加
public double add(double a, double b) {
return a + b;
}
// 重载3:三个整数相加
public int add(int a, int b, int c) {
return a + b + c;
}
// 重载4:字符串拼接
public String add(String a, String b) {
return a + b;
}
}

❌ 错误示例(不构成重载):
java
// ❌ 错误:参数相同,只有返回值不同
public int add(int a, int b) { ... }
public double add(int a, int b) { ... } // 编译错误!
// ❌ 错误:参数类型相同,顺序不同(但 Java 不区分顺序)
public int add(int a, double b) { ... }
public int add(double a, int b) { ... } // 编译错误!
✅ 重载优势:
- 提高代码灵活性;
- 同一功能支持多种输入方式;
- 更符合自然语言习惯(如
add(1,2)和add("a","b"))。
1.5 方法的内存
🧠 执行流程:
- 调用方法时 ,创建一个新的栈帧(Stack Frame);
- 栈帧包含 :
- 方法参数;
- 局部变量;
- 返回地址;
- 操作数栈(用于执行指令);
- 方法执行完毕后,栈帧被销毁,返回值传递给调用者。

进栈区出栈区:

✅ 关键点:
- 每次方法调用都会在栈上压入一个新栈帧;
- 方法执行完后,栈帧弹出,局部变量消失;
- 基本类型参数是值传递 ,引用类型是引用传递(即传递对象引用)。

🔹 参数传递机制
✅ 值传递(Pass by Value)
- 基本数据类型(如
int,double):传递的是值的拷贝; - 修改不会影响原变量。
java
public void changeValue(int x) {
x = 100;
}
int num = 5;
changeValue(num);
System.out.println(num); // 输出:5(未改变)
✅ 引用传递(Pass by Reference)
- 对象引用类型(如
String,Array,Object):传递的是引用的拷贝; - 可以修改对象内容,但不能改变引用本身。
java
public void modifyArray(int[] arr) {
arr[0] = 999; // 修改数组内容
arr = new int[]{1, 2}; // 改变引用指向(不影响外部)
}
int[] data = {1, 2, 3};
modifyArray(data);
System.out.println(data[0]); // 输出:999(内容被改)
✅ 总结:
Java 中所有参数都是"值传递",但对象类型传递的是"引用的值",因此可以修改对象内部状态。
*1.6 区分基本/引用数据
1.6.1 基本数据类型
由 Java 语言内置支持 的简单数据类型,直接存储实际的值,不包含方法(但可通过包装类扩展功能)。
🔢 共 8 种,分为 4 类:
| 类别 | 数据类型 | 占用内存 | 取值范围 | 默认值 |
|---|---|---|---|---|
| 整数型 | byte |
1 字节 | -128 ~ 127 | 0 |
short |
2 字节 | -32,768 ~ 32,767 | 0 |
|
int |
4 字节 | -2³¹ ~ 2³¹-1 | 0 |
|
long |
8 字节 | -2⁶³ ~ 2⁶³-1 | 0L |
|
| 浮点型 | float |
4 字节 | 约 ±3.4×10³⁸(6~7位有效数字) | 0.0f |
double |
8 字节 | 约 ±1.7×10³⁰⁸(15位有效数字) | 0.0 |
|
| 字符型 | char |
2 字节 | \u0000 ~ \uffff(0 ~ 65535) |
'\u0000' |
| 布尔型 | boolean |
不固定(JVM决定) | true / false |
false |

1.6.2 引用数据类型
用于引用(指向)对象 的数据类型。变量本身不存储对象内容,而是存储对象在堆内存中的地址(引用)。
📦 包括以下几类:
- 类(Class) :如
String,Scanner, 自定义类等; - 接口(Interface) :如
List,Runnable; - 数组(Array) :如
int[],String[]; - 枚举(Enum);
- 包装类(Wrapper Classes) :如
Integer,Double(用于基本类型的对象表示)。

课程学习来源于-B站@itheima!