简介
说明
本文用示例介绍Java中void类型的用法。
java需要一个确定的返回类型
java不像是php这些弱类型的语言,java语言是强类型的,意思就是说我们的方法必须要有一个确定类型的返回值,举个例子:public String test(){};
上面这个test方法有一个String类型的返回值,也可返回int等基础类型的,不管返回什么都要返回一个确定的类型。
方法也可以返回void,那么void肯定也是一种数据类型吧。但java好像只提供了两种数据类型:基本数据类型和引用数据类型。那这个void到底是什么呢?其实可以把他理解成一个特殊的数据类型也可以理解成一个方法的修饰符。
从Void看void
我们的基础类型好像都有一个封装类,比如int基本类型的封装类是Integer,char基本类型的封装类是Character,void也不例外,他也有一个封装类叫做Void,没错就是把“v”换成了大写的V。你可以这样去理解Void:
Void类(java.lang.Void)是一个不可实例化的占位符类,用来保存一个引用代表Java关键字void的Class对象。
Void类不可以继承和实例化。而且修饰方法时候必须返回null。
实例分析
Void是一个类,void就是一个基本类型
package org.example.a;
public class Demo {
public static void main(String[] args) throws Throwable {
System.out.println(Void.class);
System.out.println(void.class);
System.out.println(Integer.class);
System.out.println(int.class);
}
}
执行结果
class java.lang.Void
void
class java.lang.Integer
int
必须且只能返回null
//返回void,return可有可无
public void a1() {
return;
}
//必须且只能返回null
public Void a2() {
return null;
}
使用场景
反射中确定某个函数的返回类型
package org.example.a;
import java.lang.reflect.Method;
public class Demo {
public static void main(String[] args) throws Throwable {
for (Method method : Demo.class.getMethods()) {
if (method.getReturnType().equals(Void.TYPE)) {
System.out.println("返回void的方法是:" + method.getName());
} else if (method.getReturnType().equals(Integer.TYPE)) {
System.out.println("返回int的方法是:" + method.getName());
}
}
}
public void a() {
}
public int b() {
return 1;
}
}
执行结果
返回void的方法是:main
返回int的方法是:b
返回void的方法是:a
返回void的方法是:wait
返回void的方法是:wait
返回void的方法是:wait
返回int的方法是:hashCode
返回void的方法是:notify
返回void的方法是:notifyAll
泛型
Void也用于无值的Map中,例如Map<String,Void>,此时value必须为null。
其他网址
谁来解释下基本类型变量的class,如int.class.什么时候会使用它们? - 知乎
深入分析java中的关键字void - 知乎