第 7 课:方法(函数)
一、为什么用方法
DRY 原则(Don't Repeat Yourself):逻辑只写一次,随处调用。方法 = 复用 + 可读 + 好维护。
二、定义语法
java
public static int add(int a, int b) {
return a + b;
}
// public 访问修饰符
// static 静态方法,可直接调用
// int 返回值类型
// add 方法名(小驼峰,动词开头)
// (int a, int b) 参数列表(形参)
三、四种形态
java
static void sayHello() { } // ① 无参无返回
static void printStar(int n) { } // ② 有参无返回
static int getRandom() { return 1; } // ③ 无参有返回
static int add(int a, int b) { return a + b; } // ④ 有参有返回(最常用)
void = 没有返回值,调用时不能用变量接。
四、return 的双重身份
- 交结果
- 立即结束方法,后面的代码不执行
java
static String checkAge(int age) {
if (age < 0) return "年龄不合法"; // 提前 return,避免深层嵌套
if (age < 18) return "未成年";
return "成年";
}
有返回值的方法,所有分支都要有 return,否则编译报 missing return statement。
五、参数传递(面试高频)
Java 只有值传递,区别在于「值」是什么:
| 类型 | 传的是什么 | 方法内修改 | 影响外部? |
|---|---|---|---|
| 基本类型 | 值的副本 | 改形参 | 不影响 |
| 引用类型 | 地址的副本 | 改内容(arr0=99) | 影响 |
| 引用类型 | 地址的副本 | 改指向(a = new int\[\]{}) | 不影响 |
六、方法重载
方法名相同、参数列表不同(个数/类型/顺序)。
java
static int add(int a, int b) { return a + b; }
static int add(int a, int b, int c) { return a + b + c; }
static double add(double a, double b) { return a + b; }
只看方法名 + 参数列表(方法签名),与返回值无关:
java
static int getValue() { return 1; }
static double getValue() { return 1.0; } // ❌ 重复定义
七、可变参数
java
static int sum(int... nums) {
int total = 0;
for (int n : nums) total += n;
return total;
}
sum(); sum(1, 2); sum(1, 2, 3, 4);
规则:可变参数必须在参数列表最后。
八、递归(了解 + 面试常考)
java
static int factorial(int n) {
if (n <= 1) return 1; // 出口
return n * factorial(n - 1); // 规模递减
}
两要素:出口条件 + 问题规模递减。缺一个就是 StackOverflowError。新手优先用循环。
九、三个坑
- 方法不能嵌套定义
- 有返回值但漏写 return → 编译错误
- 调用时参数个数/类型不匹配
十、实战工具类
java
public class MyUtils {
static boolean isPrime(int n) {
if (n < 2) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
static int max(int[] arr) {
if (arr == null || arr.length == 0) return -1;
int max = arr[0];
for (int v : arr) if (v > max) max = v;
return max;
}
static String reverse(String s) {
if (s == null) return "";
return new StringBuilder(s).reverse().toString();
}
}
亮点细节:判断素数只需试到平方根(i * i <= n)。
十一、作业
- 写方法
int sumToN(int n)返回 1 到 n 的和 - 写方法
boolean isEven(int n)判断奇偶 - 写方法
double avg(int[] arr)求平均值,传入空数组返回 0 - 用重载写三个
print方法,分别接收 int、double、String
下一课预告
面向对象(上):类与对象------Java 真正的分水岭。