CodeGym /课程 /JAVA 25 SELF /返回值与 return

返回值与 return

JAVA 25 SELF
第 8 级 , 课程 3
可用

1. 引言

先从一个问题开始:为什么方法要返回点什么?为什么不能把一切都在方法内部完成,然后把结果直接打印到屏幕上?

原因在于,我们经常不仅要执行某个动作,更需要得到一个结果,以便在程序的其他部分使用。例如:

  • 方法计算两个数的和并返回它,这样我们就能把结果用于后续计算。
  • 方法判断一个数是否为偶数,并返回 truefalse,以便我们据此作出决策。
  • 方法为用户返回一条问候字符串,而我们再决定把它用在何处——打印到屏幕、写入文件或通过网络发送。

如果方法总是只打印结果,程序就会被锁定在单一场景,逻辑也难以复用。返回值使方法更灵活、更通用。

类比

想象一台咖啡机。你投币、按下按钮——得到咖啡。如果机器只会大声说“咖啡煮好了!”(却不出咖啡),你肯定不会高兴。方法也是如此:有时我们不仅想听到“完成了!”,更想拿到结果。

2. 返回值类型:方法可以返回什么

在 Java 中,声明方法时需要指定返回值类型——它可以是任意类型:intdoubleStringboolean、数组,甚至是你自定义类的对象。如果方法不返回任何值——写 void

语法:

return_type methodName(parameters)
{
    // 方法体
}
方法签名

示例:

int sum(int a, int b) 
{
    // 返回 int
}

String getGreeting(String name) 
{
    // 返回 String
}

boolean isEven(int number) 
{
    // 返回 boolean
}

void printHello() 
{
    // 不返回任何值——只是执行操作
}

重要!返回值类型是方法的“承诺”:它必须返回该类型的值。如果你承诺返回 int,却返回了 String——编译器会报错并拒绝构建程序。

3. 运算符 return:如何从方法返回值

要把方法的执行结果真正“交到外部”,使用关键字 return。它的含义是:“给你结果——到此为止,此方法结束执行。”

int sum(int a, int b) 
{
    int result = a + b;
    return result; // 返回结果
}
通过 return 返回值

还可以更简洁:

int sum(int a, int b) 
{
    return a + b;
}

当方法执行到 return 这一行时,它会结束执行、返回指定的值,并把它交还给调用该方法的地方。

重要: return 后的值的类型必须与方法声明的返回类型一致。

4. 如何使用返回值:拿来做什么?

当方法返回一个值时,你可以:

  • 把它保存到变量中。
  • 直接在表达式中使用。
  • 传递给另一个方法。
int result = sum(5, 7); // 保存到变量
System.out.println(result); // 打印结果

System.out.println(sum(10, 20)); // 直接打印结果

if (isEven(42)) 
{
    System.out.println("数字是偶数!");
}

示例:返回字符串的方法

String getGreeting(String name) 
{
    return "你好," + name + "!";
}

// 用法:
String greeting = getGreeting("Alice");
System.out.println(greeting); // 你好,Alice!

5. 实践:带返回值的方法示例

返回两个数中较大值的方法

int max(int a, int b) 
{
    if (a > b) 
    {
        return a;
    } 
    else 
    {
        return b;
    }
}

如果你已经掌握了三元运算符,还可以更简洁:

int max(int a, int b) 
{
    return (a > b) ? a : b;
}

用法:

int maximum = max(10, 25);
System.out.println("最大值: " + maximum); // 最大值: 25

如果数字为偶数则返回 true 的方法

boolean isEven(int number) 
{
    return number % 2 == 0;
}

用法:

if (isEven(18)) 
{
    System.out.println("数字是偶数!");
} 
else 
{
    System.out.println("数字是奇数!");
}

返回数组元素之和的方法

int sumArray(int[] arr) 
{
    int sum = 0;
    for (int i = 0; i < arr.length; i++) 
    {
        sum += arr[i];
    }
    return sum;
}

用法:

int[] grades = {5, 4, 3, 5, 4};
int total = sumArray(grades);
System.out.println("成绩总和: " + total);

6. 调用带返回值的方法时会发生什么

当你调用一个带返回值的方法时,程序执行会“进入”方法体,运行其代码,遇到 return,返回一个值——然后把该值代入到调用处。

示意:

int a = 2;
int b = 3;
int c = sum(a, b); // 这里调用了 sum(2, 3),返回 5,c 变为 5

流程图

        graph TD
        A["main"] --> B["sum(a, b)"]
        B --> C[计算]
        C --> D[返回结果]
        D -->|结果被返回| A
    

7. 一些有用的细节

return 会结束方法的执行

一旦在方法中遇到 return,方法立即停止执行。它之后的代码不会再运行。

int test()
{
    return 42;
    System.out.println("这行不会被打印"); // unreachable
}

在类型为 void 的方法中使用 return

void 方法(不返回任何值)中,可以使用不带值的 return——例如在满足某个条件时提前结束方法执行。

void printPositive(int number)
{
    if (number <= 0) 
    {
        System.out.println("数字不是正数!");
        return; // 直接从方法返回
    }
    System.out.println("数字: " + number);
}

8. 使用 return 时的常见错误

错误 1:并非所有路径都返回值

int getSign(int number)
{
    if (number > 0) 
    {
        return 1;
    }
    // 如果 number <= 0 怎么办?没有 return!
}
// 错误:并非所有分支都返回值

如何修复:始终确保在所有执行路径上都有 return

int getSign(int number)
{
    if (number > 0) 
    {
        return 1;
    } 
    else if (number < 0) 
    {
        return -1;
    } 
    else 
    {
        return 0;
    }
}

错误 2:返回值类型不匹配

int getNumber()
{
    return "42"; // 错误!期望的是 int,而不是 String
}

错误 3:return 之后还有代码

int test()
{
    return 5;
    System.out.println("这行不会执行"); // unreachable statement
}

错误 4:在 void 方法中使用带表达式的 return

void printSomething()
{
    return 42; // 错误!void 方法不能返回值
}

错误 5:忽略返回值

sum(10, 20); // 就这样吗?结果丢了!

如果你不使用返回值,它就会直接被丢弃。别忘了把它保存或继续在代码中传递!

错误 6:误以为 return 会打印点什么

int result = sum(2, 3);
// return 并不会打印任何东西!
// 需要显式输出:
System.out.println(result);
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION