方法
方法(method)是 Java 中组织代码的基本单位。
1. 基本定义
[修饰符] 返回值类型 方法名(参数列表) {
方法体
return 返回值;
}public class Main {
// 静态方法
static int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
System.out.println(add(3, 5));
System.out.println(add(10, 20));
}
}2. 参数传递
Java 中基本类型按值传递,引用类型按引用传递(传递的是引用的副本)。
public class Main {
static void bump(int n) { n++; } // 改不动外面
static void append(java.util.List<String> list) {
list.add("added"); // 能改 list 内容
}
public static void main(String[] args) {
int x = 10;
bump(x);
System.out.println("x = " + x); // 10
var list = new java.util.ArrayList<String>(java.util.List.of("a", "b"));
append(list);
System.out.println("list = " + list); // [a, b, added]
}
}ℹ️Java 没有引用传递的引用
Java 始终是值传递:对于引用类型,传的是引用的副本。但因为副本和原引用指向同一对象,所以能修改对象内容。重新赋值 list = newList 不会影响外面。
3. 方法重载
同名方法、不同参数(数量或类型),构成重载。
public class Main {
static int add(int a, int b) { return a + b; }
static double add(double a, double b) { return a + b; }
static String add(String a, String b) { return a + b; }
public static void main(String[] args) {
System.out.println(add(1, 2));
System.out.println(add(1.5, 2.5));
System.out.println(add("Hello, ", "Java"));
}
}4. 可变参数 varargs
public class Main {
static int sum(int... nums) {
int s = 0;
for (int n : nums) s += n;
return s;
}
public static void main(String[] args) {
System.out.println(sum()); // 0
System.out.println(sum(1, 2, 3)); // 6
System.out.println(sum(new int[]{1, 2, 3, 4, 5})); // 15
}
}💡varargs 的本质
int... nums 等价于 int[] nums。调用时编译器会构造一个数组。只能有一个 varargs 参数,且必须是最后一个。
5. 静态工具方法集合
public class Main {
static int max(int a, int b) { return a > b ? a : b; }
static int max(int a, int b, int c) { return max(max(a, b), c); }
static double avg(int... nums) {
if (nums.length == 0) return 0;
long s = 0;
for (int n : nums) s += n;
return (double) s / nums.length;
}
public static void main(String[] args) {
System.out.println(max(3, 7));
System.out.println(max(3, 7, 2));
System.out.println(avg(1, 2, 3, 4, 5));
}
}6. 递归
public class Main {
static long fact(int n) {
if (n <= 1) return 1;
return n * fact(n - 1);
}
public static void main(String[] args) {
for (int i = 0; i <= 6; i++) {
System.out.println(i + "! = " + fact(i));
}
}
}🎯 练习
// 任务:写 isPrime(n),返回 n 是否为素数
// 期望:isPrime(17)=true, isPrime(18)=false
public class Main {
static boolean isPrime(int n) {
// 补全代码
return false;
}
public static void main(String[] args) {
System.out.println("17 -> " + isPrime(17));
System.out.println("18 -> " + isPrime(18));
System.out.println("2 -> " + isPrime(2));
}
}小结
- ✅
static 返回值类型 方法名(参数)定义方法 - ✅ 基本类型按值传递;引用类型传引用的副本
- ✅ 方法重载:同名不同参
- ✅
T... args可变参数(最多一个,必须在末尾) - ✅ 递归必须有终止条件
下一章 面向对象基础。