Java 方法
学习方法定义与调用 · 难度:入门 · +10XP
Java 方法详解
方法(在某些语言中也叫函数)是 Java 中组织和复用代码的基本单元。一个方法本质上是一个带有名称的代码块,它接收输入(参数),执行特定逻辑,并可能返回一个结果。把复杂的程序分解为多个小方法,可以让代码结构更清晰,更容易测试和维护。
方法的定义与调用
Java 方法的完整定义包含访问修饰符、返回类型、方法名、参数列表和方法体。方法名采用驼峰命名法(小写开头),应该是一个动词或动词短语,清晰描述该方法做什么。
public class Calculator {
// 有返回值的方法
public static int add(int a, int b) {
return a + b;
}
// 无返回值的方法
public static void printGreeting(String name) {
System.out.println("您好," + name + "!");
}
// 无参数的方法
public static double getPi() {
return 3.14159;
}
public static void main(String[] args) {
int sum = add(10, 20); // 调用有返回值的方法
System.out.println("和:" + sum); // 30
printGreeting("小明"); // 调用 void 方法
double pi = getPi(); // 调用无参数方法
System.out.println("PI: " + pi);
}
}
方法重载(Overloading)
| 特性 | 说明 | 示例 |
|---|---|---|
| 参数数量不同 | 同名方法,参数个数不同 | add(int a, int b) vs add(int a, int b, int c) |
| 参数类型不同 | 同名方法,参数类型不同 | add(int a, int b) vs add(double a, double b) |
| 参数顺序不同 | 同名方法,参数类型顺序不同 | print(int a, String s) vs print(String s, int a) |
| 返回类型不同 | 仅返回类型不同不算重载 | int getData() 和 double getData() 不能同时存在 |
public class OverloadDemo {
// 重载:参数数量不同
public static int multiply(int a, int b) {
return a * b;
}
public static int multiply(int a, int b, int c) {
return a * b * c;
}
// 重载:参数类型不同
public static double multiply(double a, double b) {
return a * b;
}
public static void main(String[] args) {
System.out.println(multiply(2, 3)); // 6
System.out.println(multiply(2, 3, 4)); // 24
System.out.println(multiply(2.5, 3.0)); // 7.5
}
}
递归方法
递归是指方法调用自身来解决问题。递归需要两个关键要素:基准条件(停止递归)和递归条件(继续调用自身)。递归非常适合解决树形结构遍历、分治算法等问题,但不恰当使用可能导致栈溢出(StackOverflowError)。
// 递归计算阶乘
public static long factorial(int n) {
if (n <= 1) { // 基准条件
return 1;
}
return n * factorial(n - 1); // 递归条件
}
// 递归计算斐波那契数(注意:此方法效率低,仅作演示)
public static long fibonacci(int n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
- 创建一个类,包含
max(int a, int b)、max(int a, int b, int c)、max(double a, double b)三个重载方法,选出最大值 - 编写方法接收一个整数数组,返回数组的平均值,在 main 中测试
- 用递归方法实现字符串反转(例如 "hello" -> "olleh")
- 编写方法
isPrime(int n)判断一个数是否为质数 - 将之前练习中的数组排序、查找等逻辑封装成工具类,所有方法都用 public static 修饰