【Java SE 基础学习打卡】31 方法的返回值与void关键字

目录

  • 前言
  • [一、有返回值方法:让方法 "有产出"(return 返回数据 + 结束方法)](#一、有返回值方法:让方法 “有产出”(return 返回数据 + 结束方法))
    • [1.1 生活化类比(秒懂)](#1.1 生活化类比(秒懂))
    • [1.2 定义规则](#1.2 定义规则)
    • [1.3 代码示例(求和方法:返回 int 类型结果)](#1.3 代码示例(求和方法:返回 int 类型结果))
    • [1.4 return 的 "结束方法" 作用(关键特性)](#1.4 return 的 “结束方法” 作用(关键特性))
  • [二、无返回值方法:让方法 "只干活"(void 修饰,return 可选)](#二、无返回值方法:让方法 “只干活”(void 修饰,return 可选))
    • [2.1 生活化类比(秒懂)](#2.1 生活化类比(秒懂))
    • [2.2 定义规则](#2.2 定义规则)
    • [2.3 代码示例(打印方法:void 修饰,无返回值)](#2.3 代码示例(打印方法:void 修饰,无返回值))
    • [2.4 关键提醒:void 方法不能接收返回值](#2.4 关键提醒:void 方法不能接收返回值)
  • 三、返回值类型不匹配的常见错误与解决
    • [3.1 错误 1:return 值类型 ≠ 声明的返回值类型](#3.1 错误 1:return 值类型 ≠ 声明的返回值类型)
    • [3.2 错误 2:有返回值方法漏写 return 语句](#3.2 错误 2:有返回值方法漏写 return 语句)
    • [3.3 错误 3:void 方法中 return 后跟值](#3.3 错误 3:void 方法中 return 后跟值)
    • [3.4 错误 4:分支场景下,部分路径漏写 return](#3.4 错误 4:分支场景下,部分路径漏写 return)
  • [四、新手必避的 5 个 "致命坑"](#四、新手必避的 5 个 “致命坑”)
    • [4.1 坑 1:有返回值方法只在分支里写 return](#4.1 坑 1:有返回值方法只在分支里写 return)
    • [4.2 坑 2:void 方法试图返回值](#4.2 坑 2:void 方法试图返回值)
    • [4.3 坑 3:返回值类型是 double,却返回 int(隐式转换坑)](#4.3 坑 3:返回值类型是 double,却返回 int(隐式转换坑))
    • [4.4 坑 4:调用有返回值方法时,忽略返回值(逻辑坑)](#4.4 坑 4:调用有返回值方法时,忽略返回值(逻辑坑))
    • [4.5 坑 5:return 后写代码(不可达代码)](#4.5 坑 5:return 后写代码(不可达代码))
  • 总结

前言

上一节咱们学了方法重载,解决了 "同名方法适配不同参数" 的问题。但新手写方法时还会卡在一个关键点:什么时候方法要 "返回结果"(比如求和后给个数字),什么时候只需要 "干活就行"(比如打印内容)?return 语句到底该怎么写?为什么有时候写 return 会报错,有时候不写又不行?

这一节咱们就聚焦 "返回值" 和 "void 关键字",把方法的 "产出规则" 讲透:先搞懂有返回值方法的定义和调用(return 既返回数据又结束方法),再学无返回值方法(void 修饰,return 可选仅结束方法),最后拆解返回值类型不匹配的常见错误 ------ 全程用生活化场景 + 可运行代码,保证新手能精准掌握 "什么时候要返回、怎么返回"!

一、有返回值方法:让方法 "有产出"(return 返回数据 + 结束方法)

1.1 生活化类比(秒懂)

你去便利店买一瓶可乐:

  • 你给店员 10 元(传参数);

  • 店员做两件事:把可乐递给你(返回数据)、结束这次交易(结束方法);

  • 核心:你要的是 "可乐" 这个 "产出",没有这个产出,交易就没意义。

1.2 定义规则

有返回值方法的核心是:返回值类型要和 return 后的值类型一致,且必须写 return 语句。定义格式:

java 复制代码
修饰符 返回值类型 方法名(参数列表) {
    // 业务逻辑
    执行语句;
    // 必须写return,且值的类型和返回值类型一致
    return 对应类型的值;
}

1.3 代码示例(求和方法:返回 int 类型结果)

java 复制代码
public class ReturnValueDemo {
    // 有返回值方法:计算两个int数的和,返回int类型
    public static int add(int a, int b) {
        int sum = a + b;
        // return的两个作用:
        // 1. 返回sum的值(和返回值类型int一致);
        // 2. 结束方法,后面的代码不会执行
        return sum;
        System.out.println("这行代码永远执行不到"); // 编译报错:return后不可达
    }

    public static void main(String[] args) {
        // 调用有返回值方法:必须接收返回值(或直接使用)
        int result = add(10, 20); // 接收返回值30
        System.out.println("10+20=" + result); // 输出30

        // 也可以直接使用返回值,不单独接收
        System.out.println("20+30=" + add(20, 30)); // 输出50
    }
}

1.4 return 的 "结束方法" 作用(关键特性)

return 不仅能返回数据,还会立即结束方法,哪怕后面还有代码:

java 复制代码
// 例子:找到1-10中第一个偶数就返回,后面的数字不再检查
public static int findFirstEven() {
    for (int i = 1; i <= 10; i++) {
        if (i % 2 == 0) {
            return i; // 找到2,返回并结束方法,循环直接终止
        }
        System.out.println("检查数字:" + i); // 只打印1
    }
    return -1; // 兜底return(避免编译报错,实际不会执行)
}

public static void main(String[] args) {
    int firstEven = findFirstEven();
    System.out.println("第一个偶数:" + firstEven); // 输出2
}

执行结果:

Java 复制代码
检查数字:1
第一个偶数:2

二、无返回值方法:让方法 "只干活"(void 修饰,return 可选)

2.1 生活化类比(秒懂)

你去奶茶店让店员 "打扫一下操作台":

  • 你不用店员返回任何东西(无返回值);

  • 店员只需要完成 "打扫" 这个动作(执行方法体),做完就结束;

  • 核心:要的是 "动作完成",不是 "具体产出"。

2.2 定义规则

无返回值方法的核心是:用 void 修饰返回值类型,return 可选(仅用于结束方法)。定义格式:

java 复制代码
修饰符 void 方法名(参数列表) {
    // 业务逻辑(只干活,不返回数据)
    执行语句;
    // 可选:写return; 仅结束方法,后面不能跟任何值
    // return;
}

2.3 代码示例(打印方法:void 修饰,无返回值)

java 复制代码
public class VoidMethodDemo {
    // 无返回值方法:打印欢迎语,只干活不返回数据
    public static void printWelcome() {
        System.out.println("======================");
        System.out.println("  欢迎学习Java方法!");
        System.out.println("======================");
        // void方法可以不写return,方法执行完自动结束
    }

    // 无返回值方法:用return提前结束(可选)
    public static void printNum(int n) {
        for (int i = 1; i <= n; i++) {
            if (i == 5) {
                return; // 提前结束方法,只打印1-4
            }
            System.out.println("数字:" + i);
        }
    }

    public static void main(String[] args) {
        // 调用无返回值方法:直接调用,不能接收返回值
        printWelcome(); 
        printNum(10); // 只打印1-4
    }
}

2.4 关键提醒:void 方法不能接收返回值

新手容易犯的错:试图接收 void 方法的返回值,编译直接报错:

java 复制代码
// 错误示例:void方法没有返回值,不能接收
int res = printWelcome(); // 编译报错:不兼容的类型:void无法转换为int

三、返回值类型不匹配的常见错误与解决

新手写 return 最容易出错的地方就是 "类型不匹配",下面拆解 3 个典型错误,给出解决方法:

3.1 错误 1:return 值类型 ≠ 声明的返回值类型

反例:

java 复制代码
// 声明返回值类型是int,却返回double
public static int add(int a, int b) {
    double sum = a + b;
    return sum; // 编译报错:double无法转换为int
}

解决方法:

  1. 让 return 值类型匹配返回值类型(推荐):

    java 复制代码
    public static int add(int a, int b) {
        int sum = a + b;
        return sum; // int匹配int
    }
  2. 调整返回值类型,适配 return 值:

    java 复制代码
    public static double add(int a, int b) {
        double sum = a + b;
        return sum; // double匹配double
    }

3.2 错误 2:有返回值方法漏写 return 语句

反例:

java 复制代码
// 声明返回值类型是int,但漏写return
public static int sumToN(int n) {
    int sum = 0;
    for (int i = 1; i <= n; i++) {
        sum += i;
    }
    // 漏写return,编译报错:缺少返回语句
}

解决方法:

必须补充 return 语句,且值类型匹配:

java 复制代码
public static int sumToN(int n) {
    int sum = 0;
    for (int i = 1; i <= n; i++) {
        sum += i;
    }
    return sum; // 补充return,int匹配int
}

3.3 错误 3:void 方法中 return 后跟值

反例:

java 复制代码
// void方法不能返回值,return后不能跟任何内容
public static void printNum(int n) {
    return n; // 编译报错:void方法不能返回值
}

解决方法:

  1. 如果需要返回值:把 void 改成对应返回值类型;

  2. 如果只是想结束方法:写return;(无值):

    java 复制代码
    public static void printNum(int n) {
        if (n < 0) {
            return; // 仅结束方法,无返回值
        }
        System.out.println(n);
    }

3.4 错误 4:分支场景下,部分路径漏写 return

反例:

java 复制代码
// if分支有return,else分支漏写,编译报错
public static int getScoreLevel(int score) {
    if (score >= 90) {
        return 1; // 优秀
    } else if (score >= 80) {
        return 2; // 良好
    }
    // 漏写return,编译报错:缺少返回语句
}

解决方法:

保证所有执行路径都有 return,或补充兜底 return:

java 复制代码
public static int getScoreLevel(int score) {
    if (score >= 90) {
        return 1;
    } else if (score >= 80) {
        return 2;
    } else {
        return 3; // 兜底return,覆盖所有情况
    }
}

四、新手必避的 5 个 "致命坑"

4.1 坑 1:有返回值方法只在分支里写 return

  • 错误示例:

    java 复制代码
    public static int findNum(int n) {
        if (n > 0) {
            return n; // 仅分支里有return,编译报错
        }
    }
  • 避坑:要么给所有分支加 return,要么在方法末尾加兜底 return(比如 return -1)。

4.2 坑 2:void 方法试图返回值

  • 错误示例:

    java 复制代码
    public static void printSum(int a, int b) {
        return a + b; // void不能返回值
    }
  • 避坑:如果需要返回和,把 void 改成 int;如果只是打印,直接System.out.println(a+b)

4.3 坑 3:返回值类型是 double,却返回 int(隐式转换坑)

  • 错误示例:

    java 复制代码
    // 看似int能转double,但新手容易忽略"精度问题"
    public static double calcAvg(int a, int b) {
        return (a + b) / 2; // 返回int(比如10+20=30/2=15),不是double的15.0
    }
  • 避坑:强制转换为 double,保证类型匹配且精度正确:

    java 复制代码
    public static double calcAvg(int a, int b) {
        return (double)(a + b) / 2; // 返回15.0,匹配double
    }

4.4 坑 4:调用有返回值方法时,忽略返回值(逻辑坑)

  • 错误示例:

    java 复制代码
    // 调用add方法却不接收返回值,白执行了求和逻辑
    add(10, 20);
  • 避坑:要么接收返回值,要么直接使用(比如System.out.println(add(10,20))),不要无意义调用。

4.5 坑 5:return 后写代码(不可达代码)

  • 错误示例:

    java 复制代码
    public static int add(int a, int b) {
        return a + b;
        System.out.println("求和完成"); // 编译报错
    }
  • 避坑:return 是方法的 "最后一步",后面不能写任何代码。

总结

这一节咱们掌握了方法返回值和 void 关键字的核心规则,记住 3 个核心点:

  1. 有返回值方法:返回值类型和 return 值类型必须一致,且必须写 return(返回数据 + 结束方法);

  2. 无返回值方法:用 void 修饰,return 可选(仅结束方法,不能跟值);

  3. 常见错误:类型不匹配、漏写 return、void 方法返回值,需按类型匹配原则修正。

返回值是方法和调用者之间的 "数据桥梁",掌握它的规则,能让方法的 "产出" 和 "执行逻辑" 更清晰。

相关推荐
编程火箭车2 天前
【Java SE 基础学习打卡】28 方法的定义与调用
java se·参数传递·返回值·java 基础·新手避坑·java 方法·方法定义与调用
编程火箭车15 天前
【Java SE 基础学习打卡】27 方法的概述
编程语法·java se·代码复用·编程小白入门·方法概述·功能模块化·java 方法
编程火箭车1 个月前
【Java SE 基础学习打卡】24 循环结构 - while
java·编程基础·循环结构·while循环·java se·do-while循环·避免死循环
编程火箭车1 个月前
【Java SE 基础学习打卡】23 分支语句 - switch
编程语法·java se·switch 语句·新手避坑·java 分支结构·编程小白入门·等值判断
BillKu4 个月前
Java核心概念详解:JVM、JRE、JDK、Java SE、Java EE (Jakarta EE)
java·jvm·jdk·java ee·jre·java se·jakarta ee
叶 落7 个月前
[Java 基础]正则表达式
java·正则表达式·java 基础
叶 落7 个月前
[Java 基础]数组
java·java 基础
叶 落7 个月前
[Java 基础]注释
java·开发语言·java 基础
Thanks_ks8 个月前
26 C 语言函数深度解析:定义与调用、返回值要点、参数机制(值传递)、原型声明、文档注释
函数调用·函数定义·文档注释·return 语句·函数返回值·形参与实参·函数原型声明