第 7 课:方法(函数)

第 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 的双重身份

  1. 交结果
  2. 立即结束方法,后面的代码不执行
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。新手优先用循环。

九、三个坑

  1. 方法不能嵌套定义
  2. 有返回值但漏写 return → 编译错误
  3. 调用时参数个数/类型不匹配

十、实战工具类

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)。

十一、作业

  1. 写方法 int sumToN(int n) 返回 1 到 n 的和
  2. 写方法 boolean isEven(int n) 判断奇偶
  3. 写方法 double avg(int[] arr) 求平均值,传入空数组返回 0
  4. 用重载写三个 print 方法,分别接收 int、double、String

下一课预告

面向对象(上):类与对象------Java 真正的分水岭。

相关推荐
橙子家1 小时前
Exception 简介以及都有哪些类型【C# 基础】
后端
flash俊杰1 小时前
agent 节点、人工授权竞速邮箱与四态 golden 评测
后端
梦里寻码2 小时前
给 AI Agent 搭围栏:Monorepo 是被低估的 Agent 基础设施
前端·后端·github
高晶2 小时前
Android 电子词典开发实战指南
后端·程序员
深入云栈2 小时前
Netty 4.2.x 源码深度解析 (十九):ChannelPool 连接池 —— 连接复用与资源管理
java·后端·架构
yunwei372 小时前
eBPF 教程:BPF 迭代器用于内核数据导出
linux·后端·性能优化
大哥43092 小时前
分布式锁的"不重复执行",凭什么算被证明了?
后端
silvamux_2 小时前
Spring Boot 调用大模型 api 最小可跑教程
java·spring boot·后端
今年下半年2 小时前
【Spring Boot 】通过 OpenFeign 请求第三方接口
java·spring boot·后端·openfeign