void 是一个关键字,在 Java 中它表示“无返回值”或“空”。

它主要用在两个地方:
- 方法声明中
return语句中
下面我们分别进行详细说明。
在方法声明中:表示该方法不返回任何值
这是 void 最常见的用法,当你定义一个方法时,如果你希望它执行一系列操作,但不向调用者返回任何结果,那么你就在方法签名中使用 void。
语法格式:
修饰符 void 方法名(参数列表) {
// 方法体(执行的代码)
}
示例:
想象一个方法,它的作用只是在屏幕上打印一条欢迎信息,它执行了操作(打印),但不需要返回任何数据给调用者。

public class MyClass {
// 这个方法没有返回值,所以返回类型是 void
public void printWelcomeMessage() {
System.out.println("欢迎使用我们的程序!");
// 方法执行完毕,隐式返回,不需要 return 语句
}
public static void main(String[] args) {
MyClass myObject = new MyClass();
// 调用 printWelcomeMessage 方法
// 我们只是执行它,但不接收任何返回值
myObject.printWelcomeMessage();
}
}
关键点:
- 如果一个方法的返回类型是
void,那么在它的方法体中,你可以使用return;语句来提前终止方法的执行,但你不能在return后面跟任何值。 - 下面的写法是错误的:
public void myMethod() { // ... return "Hello"; // 错误!void类型的方法不能返回值 }
在 return 语句中:表示提前退出方法
在返回类型为 void 的方法内部,return 关键字后面不能跟任何值,但 return; 语句本身是合法的,它的作用是立即停止当前方法的执行,并返回到调用该方法的地方。
示例:
public class VoidExample {
public void checkAge(int age) {
if (age < 0) {
System.out.println("年龄不能为负数!");
// 提前结束方法,不再执行下面的代码
return;
}
// 只有当 age >= 0 时,这里的代码才会被执行
System.out.println("您的年龄是: " + age);
}
public static void main(String[] args) {
VoidExample example = new VoidExample();
example.checkAge(-5); // 输出: 年龄不能为负数!
example.checkAge(25); // 输出: 您的年龄是: 25
}
}
在这个例子中,当传入的年龄是负数时,return; 语句会立即终止 checkAge 方法的执行,System.out.println("您的年龄是: " + age); 这一行代码不会被执行。
与其他返回类型的对比
为了更好地理解 void,我们可以看看有返回值的方法是什么样的。

| 返回类型 | 含义 | 示例 | 调用方式 |
|---|---|---|---|
void |
不返回任何值 | public void printLog() |
myObject.printLog(); (直接调用,不接收返回值) |
int |
返回一个整数 | public int add(int a, int b) |
int result = myObject.add(5, 3); (需要用变量接收返回值) |
String |
返回一个字符串 | public String getUserName() |
String name = myObject.getUserName(); (需要用变量接收返回值) |
boolean |
返回一个布尔值 | public boolean isLoggedIn() |
boolean status = myObject.isLoggedIn(); (需要用变量接收返回值) |
核心区别:
void方法:执行一个动作(Action),比如打印、修改对象状态、写入文件等。- 非
void方法:执行一个查询(Query),并返回一个结果(Result),比如计算、获取数据等。
特殊情况:void 在泛型中的使用
在 Java 5 之后引入的泛型中,Void 是一个特殊的不可实例化的引用类型。
void(小写):是 Java 语言的关键字,用于表示无返回值。Void(大写):是一个类,位于java.lang包下,它没有任何字段或方法,并且不能被实例化(即你不能new Void())。
它有什么用呢?主要用于反射或需要表示“无类型”的泛型场景,最常见的用途是在 Future 或 Callable 中,当你提交一个不关心返回值的任务时。
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class VoidGenericExample {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newSingleThreadExecutor();
// 使用 Void 作为 Callable 的泛型类型,表示这个任务不返回任何有意义的值
Callable<Void> task = () -> {
System.out.println("正在执行一个后台任务...");
Thread.sleep(1000);
// Callable 的 return 语句必须返回一个 Void 类型的值
// 但 Void 不能 new,所以只能返回 null
return null;
};
Future<Void> future = executor.submit(task);
// 你可以检查任务是否完成
System.out.println("任务已提交,正在执行...");
// 获取结果(会阻塞直到任务完成)
// 因为返回类型是 Void,future.get() 的结果永远是 null
future.get(); // 等待任务完成
System.out.println("任务完成!");
executor.shutdown();
}
}
在这个例子中,Callable<Void> 明确地表示这个可调用任务不会返回任何值,虽然技术上它返回 null,但 Void 类型在编译层面保证了这一点。
| 情景 | 含义 | 示例 |
|---|---|---|
| 方法返回类型 | 表示该方法不返回任何值。 | public void doSomething() |
return 语句 |
在 void 方法中,用于提前结束方法执行。 |
return; |
泛型 Void |
一个特殊的类,用于表示泛型操作中没有返回值的占位符。 | Callable<Void> |
记住这个核心:void Java 用来告诉编译器和程序员“这个方法不返回任何东西”的方式。
