类类型可以创建对象,照你这么说,void d= new void(); 应该也是可以的,可是为什么就不行了?请给解释。
因为Void这个类的无参构造方法是私有的(private),如图所示
因为 new 对象的时候需要调用这个构造方法,但是私有的无法访问到,就调用不了,所以就无法通过new的方式来创建类的实例化对象,即使用类的类类型的newInstarce()方法来实例化对象也会抛出异常,如图所示
总结:构造方法的访问修饰符为私有的(private)的时候,就无法实例化该类了,除非重构个公开的有参构造方法,并调用这个有参的构造方法来实现实例化类的对象。
如下,创建一个Student类
public class Student { private Student() { // 私有的无参构造方法 } public Student(String name) { // 重构一个 公开的 有参 构造方法 System.out.println(name); } }
实例化对象时如下图所示。
因为new 是静态加载类对象,需要调用无参的构造方法,而Void的无参构造方法是私有的,所有不能直接new出来。如果要实例化,只能通过Class.forName()方式。