Java 中的返回值
写一个名叫 twice 的方法:接收一个叫 n 的 int,并把该数的两倍交回去。方法头以 int 开头,不是 void:static int twice(int n)。在花括号里写 return n * 2;。在 main 里打印这次调用的结果:System.out.println(twice(7));。屏幕应显示一行:14。twice 自己不调用 println。它只把 14 交回去。main 打印这个数字。本页教的就是这种交回。
把数字交回给 main
在 parameters 那一页,greet 和 show 是在方法体里打印的。调用把值送进去,方法往屏幕写。这里方法仍接收一个值,但还会把一个值送出来。return 这个词标出那个出去的值。main 可以把它存起来,也可以打印它。
新建一个小程序文件,名叫 Box.java。第一行的 public class 必须与文件名一致:public class Box。不要在这个文件里留下旧的 Tip 或 Chime 类名;编译器要求类名与文件名一致。
在 main 外面、仍在类的花括号里,写:
static int twice(int n) {
return n * 2;
}
方法头不再写 void。它写 int,因为交回来的值是 int。括号里的 int n 仍是参数——和上一页同一思路。方法体只有一条语句:return n * 2;。它把 n 乘以 2,并把乘积交给调用 twice 的一方。本页的 twice 里没有 System.out.println。编译前先保存文件。
带 twice 的 Box.java
这就是完整的小程序。twice 负责计算。main 负责打印。
public class Box {
public static void main(String[] args) {
System.out.println(twice(7));
}
static int twice(int n) {
return n * 2;
}
}
在存放 Box.java 的文件夹里运行 javac Box.java。当圆括号、花括号和分号都匹配时,javac 自己不写任何一行。然后运行 java Box——不要写成 java Box.java。第二条命令去掉 .java 结尾。同一组两条命令在 Windows 和 macOS 上都可用;本页不要求为任一系统换一套 shell 写法。程序应打印一行后结束:14。它不应等待你打字。若终端在等键盘输入,说明文件里还留着旧练习的 nextLine 调用。删掉那个调用,保留 System.out.println(twice(7)); 以及上面的 twice 方法。屏幕行不对,并不意味着你需要重新安装 JDK。
按顺序走一遍运行。Java 从 main 开始。调用 twice(7) 把 7 送进 n。在 twice 里,return n * 2; 算出 14,并把这个 14 交回给 main。然后 println 写出 14。twice 自己没有往屏幕写。若把调用改成 twice(3),屏幕应显示 6。方法体不变;只是参数变了,交回的乘积随之改变。若屏幕显示 7 而不是 14,说明你在 twice 里打印了 n,或在 main 里打印了参数却没有调用 twice——把加倍放在 return 那一行,并打印调用的结果。
你也可以先在 main 里用一个名字保存返回值,再打印:
int result = twice(7);
System.out.println(result);
这也显示一行:14。调用先结束并填满 result。然后 println 写出 result。两种写法——直接打印调用,或先存再打印——都使用 twice 里同一个 return。
打印 main 收到的值
若想换一行屏幕输出,只改调用里的数字。不要动 return n * 2;。每次改完再编译运行:javac Box.java,然后 java Box。twice(0) 应打印 0。twice(10) 应打印 20。每次 main 打印的都是 twice 交回来的东西。
若 twice 的方法头仍写 void,但方法体有 return n * 2;,javac 会写错误——void 表示什么都不交回,带值的 return 对不上。若方法头写 int,但方法体没有 return,javac 也会写错误——在这个初学形状里,int 方法必须在每条路径上交回一个 int。若方法体只打印、从不 return,你又回到了 Tip 那一页的思路;本页要的是数字落在 main 手里。
void 与带类型的 return
把两种形状并排放在一起读。void 方法执行完方法体就结束。带类型 return 的方法必须用 return 交回一个值。当返回类型不是 void 时,main 把这次调用就当作那个值。
📊 void 方法体与 return 对照
| 形状 | 方法做什么 | main 常做什么 |
|---|---|---|
| void show(int n) | 在方法体里打印 | 调用 show(9);,可能不再打印别的 |
| int twice(int n) | return n * 2; | 打印或保存 twice(7) |
常见混用是:在 twice 里写 System.out.println(n * 2);,方法头仍是 int 却没有 return。这时 javac 会抱怨,或者你把方法头改回 void,main 就再也没有可从调用里打印的值了。另一种混用是:方法头写 int,却写成没有值的 return;。请保持 return n * 2;,让返回表达式的类型与 int 一致。在 main 里写 System.out.println("twice"); 会打印单词 twice;并不会调用方法。若要屏幕上出现 14,请保持 println(twice(7))。
Tip 页残留的 greet 演示若还在同一文件里、只在方法内打印 hi lena,会把屏幕搞乱。把 main 清到只用 twice 的那条 println,并只保留一个会返回的方法。不要把 twice 嵌进 main 的花括号里。方法写在类里面、与 main 并列。在类结束前先合上 twice 的花括号。
overloading 之前
你可以写 static int twice(int n),交回一个算好的值,并从 main 打印它。屏幕显示的是 main 收到的数字,不是方法自己打印的一行。当你需要交回一个值时,void 不是正确的方法头。下一页是 overloading:参数列表不同时,多个方法可以共用一个名字。
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部