概述
Void 类是无法实例化的占位符类,用于保存对表示Java关键字void的 Class 对象的引用。
正如源码所言
The {@code Void} class is an uninstantiable placeholder class to hold a reference to the {@code Class} object representing the Java keyword void.
所以void也有对应的包装类java.lang.Void,不过我们无法直接对它们进行操作
继承关系
public final class Void final类,无父类。
成员变量
只有一个成员变量 返回Void类对应的基础类型的名称,也就是"void"
public static final Class<Void> TYPE = (Class<Void>) Class.getPrimitiveClass("void");
构造方法
不能被实例化
private Void() {}
从Void看void
我们的基础类型好像都有一个封装类,比如int基本类型的封装类是Integer,char基本类型的封装类是Character,void也不例外,他也有一个封装类叫做Void,没错就是把“v”换成了大写的V。你可以这样去理解Void:
其实Void类是一个不可实例化的占位符类,用来保存一个引用代表Java关键字void的Class对象。
Void类型不可以继承和实例化。而且修饰方法时候必须返回null。
下面我们再来研究研究这个Void。
(1)确定类型:Void是一个类,void就是一个基本类型
public class Test {
public static void main(String[] args) {
System.out.println(Void.class);
System.out.println(void.class);
}
}
//output
//class java.lang.Void
//void
(2)基本使用:必须且只能返回null
public class Test {
//返回void,return可有可无
public void a1() {
return;
}
//必须且只能返回null
public Void a2() {
return null;
}
}
(3)使用场景:在反射中确定某个函数的返回类型
public class Test {
// 在这里定义两个方法:
//(1)a方法返回void
//(2)b方法返回int
public void a() {}
public int b() {
return 1;
}
public static void main(String args[]) {
for (Method method : Test.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());
}
}
}
}
//output
//返回void的方法是:main
//返回int的方法是:b
//返回void的方法是:a
(4)使用场景:泛型中使用
Future用来保存结果。Future的get方法返回结果(类型为T)。但如果操作并没有返回值呢?这种情况下就可以用Future表示。当调用get后结果计算完毕则返回后将会返回null。
Void也用于无值的Map中,例如Map<,Void>这样map将具Set有一样的功能。