方法
什么是方法
方法是执行特定功能的一段代码集合,相当于其他语言中的函数或子程序。通过方法将代码组织成一个个可重用的单元,提高程序的结构性和可维护性。Java 中的方法必须定义在类中,且不能在方法内部嵌套定义其他方法。
方法的定义
[访问修饰符] [static] 返回值类型 方法名([参数列表]) {
// 方法体
[return 返回值;]
}
- 修饰符:可选,指定方法的访问权限,如
public、private、protected等。 - 返回值类型:指定方法执行后返回的数据类型,可以是任何数据类型,但是必须与方法体中
return语句所返回的类型匹配,如果无返回值,则可以使用void。 - 方法名:遵循 Java 标识符命名规则,通常使用小驼峰命名法。
- 参数列表:调用方法时传递给方法的参数,格式为
参数类型 参数名,多个参数用逗号隔开,无参数时写成空括号()。
方法的调用
// 无参方法调用
方法名();
对象.方法名();
// 带参方法调用
方法名(实参列表);
对象.方法名(实参列表);
// 静态方法调用
类名.方法名();
方法重载 (Overloading)
在同一个类中,允许存在多个同名方法,只要它们的参数列表不同(参数类型、个数或顺序不同)。
📝 注意:
- 只要方法的参数类型、个数、顺序不同,方法就可以重载。
- 方法返回值类型、异常类型声明、访问修饰符均不影响重载。
- 构造方法也可以重载。
示例:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
}
可变参数 (Varargs)
Java 允许方法接受一个可变数量的参数,使用 ... 表示。
📝 注意:
- 一个方法只能有一个可变参数,多个可变参数会引发歧义。
- 可变参数必须作为方法的最后一个参数,否则会导致编译错误。
- 可变参数本质上是数组,所以可直接传递数组。
- 频繁调用可变参数方法可能影响性能,因为需要隐式的创建数组。
- 当固定参数方法与可变参数方法同时存在时,固定参数方法会被优先调用。
- 两个可变参数方法重载时,对于空参数的调用会引发歧义,所以会导致编译错误。
示例:
public int sum(int... numbers) {
int total = 0;
for (int num : numbers) {
total += num;
}
return total;
}
递归方法(Recursive)
方法可以递归的调用自身。
📝 注意:
- 递归必须包含可触达的终止条件,否则会无限递归直至栈溢出。
- 每次递归调用必须缩小问题规模,从而可以确保向终止条件逼近。
- 递归调用栈的空间复杂度为 。
示例:
public int factorial(int n) {
if (n == 1) {
return 1;
}
return n * factorial(n - 1);
}
形参与实参
- 形参:是方法定义时指定的变量,用作占位符。
- 实参:是在调用方法时传入的具体数据,其数量、类型和顺序必须与形参一致。
示例:
public int add(int x, int y) {
// x 和 y 是形参
return x + y;
}
// 10 和 20 是实参
int result = add(10, 20);
地址传递和值传递
- 值传递(基本数据类型):基本类型传递的是值的副本,方法内修改不影响原始变量。
- 地址传递的本质(引用数据类型):引用类型传递的是地址值的副本,方法那可以修改对象的属性,但重新赋值引用无效。
示例:
public class Dome {
static void changeNum(int num) {
// 修改副本,不影响原始值
num = 100;
}
static void changeName(Person p) {
// 修改对象属性(影响原始对象)
p.name = "Bob";
// 重新赋值引用(不影响原始引用)
p = new Person();
}
public static void main(String[] args) {
int a = 10;
// 基本类型(值副本传递)
changeNum(a);
// 依旧输出 10
System.out.println(a);
Person person = new Person("Alice");
// 引用类型(地址值副本传递)
changeName(person);
// 会输出 "Bob",因为 name 被修改
System.out.println(person.name);
}
}
最佳实践
- 避免过长的方法。
- 方法应该只做一件事。
- 方法名应该能准确的描述其功能。
- 适当的使用注释说明复杂逻辑。
- 合理使用访问修饰符来控制可见性。

Comments NOTHING