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。

小结:方法 = 修饰符 + 返回类型 + 名称 + 参数 + 方法体;参数是值传递,引用类型改的是对象内容;重载看参数列表而非返回类型;可变参数本质是数组;递归必须有终止条件。

笔记加载中…