Java 方法
方法把一段可复用的逻辑封装起来:给个名字、接收参数、返回结果,避免到处复制代码。Java 程序的入口 main 本身就是一个方法。
方法定义与调用
定义格式:修饰符 + 返回类型 + 方法名(参数列表) + 方法体。void 表示无返回值;static 方法能用类名直接调用。
public class MethodDemo {
static void sayHello() { // 无参无返回值
System.out.println("你好");
}
static int add(int a, int b) { // 有参有返回值
return a + b; // return 返回结果并结束方法
}
public static void main(String[] args) {
sayHello(); // 输出:你好
System.out.println(add(3, 5)); // 输出:8
System.out.println(Math.max(3, 7)); // 输出:7(跨类调 static)
}
}
调用规则:static 方法在本类可直接调用,跨类用 类名.方法名();实例(非 static)方法必须先 new 对象,例如 new Calculator().multiply(4, 5) 返回 20。return 还用于提前结束方法:void 方法里写 return; 表示提前返回、不带值。
参数传递:值传递
Java 只有值传递:基本类型传的是值的副本,方法内修改不影响外面;引用类型传的是“引用”的副本,方法内通过引用改动对象内容会反映到外面。
public class PassDemo {
static void change(int x) {
x = 100; // 只修改了副本
}
static void append(StringBuilder sb) {
sb.append("!"); // 通过引用修改了对象
}
public static void main(String[] args) {
int n = 5;
change(n);
System.out.println(n); // 输出:5(外面不变)
StringBuilder s = new StringBuilder("hi");
append(s);
System.out.println(s); // 输出:hi!
}
}
方法重载与可变参数
同一类中方法名相同、参数列表不同(个数 / 类型 / 顺序)叫重载,编译器按实参自动选择;仅返回类型不同不算重载。可变参数 int... nums 接收 0 个或多个同类型参数,本质是数组:
public class OverloadDemo {
static int sum(int a, int b) { return a + b; }
static int sum(int... nums) { // 可变参数
int total = 0;
for (int x : nums) total += x;
return total;
}
public static void main(String[] args) {
System.out.println(sum(1, 2)); // 输出:3
System.out.println(sum(1, 2, 3, 4)); // 输出:10
}
}
递归
public class RecursionDemo {
static int factorial(int n) { // 阶乘 n!
if (n <= 1) return 1; // 终止条件
return n * factorial(n - 1);
}
static int fib(int n) { // 斐波那契
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}
public static void main(String[] args) {
System.out.println(factorial(5)); // 输出:120
System.out.println(fib(10)); // 输出:55
}
}
注意事项
- 方法不能嵌套定义:Java 不允许在方法内部再定义一个普通方法。
- 递归太深会抛 StackOverflowError,能用循环的地方尽量用循环。
- 命名规范:方法名小驼峰、动词开头,如 getUserName、calculateTotal。
小结:方法 = 修饰符 + 返回类型 + 名称 + 参数 + 方法体;参数是值传递,引用类型改的是对象内容;重载看参数列表而非返回类型;可变参数本质是数组;递归必须有终止条件。