为了账号安全,请及时绑定邮箱和手机立即绑定

类类型可以创建对象,照你这么说,void d= new void(); 应该也是可以的,可是为什么就不行了?请给解释。

类类型可以创建对象,照你这么说,void d= new void();  应该也是可以的,可是为什么就不行了?请给解释。

正在回答

2 回答

因为Void这个类的无参构造方法是私有的(private),如图所示

58a4871e000120cd05000344.jpg

因为 new 对象的时候需要调用这个构造方法,但是私有的无法访问到,就调用不了,所以就无法通过new的方式来创建类的实例化对象,即使用类的类类型的newInstarce()方法来实例化对象也会抛出异常,如图所示

58a4872000012c2c05000269.jpg

总结:构造方法的访问修饰符为私有的(private)的时候,就无法实例化该类了,除非重构个公开的有参构造方法,并调用这个有参的构造方法来实现实例化类的对象。

如下,创建一个Student类

public class Student {
	private Student() { // 私有的无参构造方法
	}

	public Student(String name) { // 重构一个 公开的 有参 构造方法
		System.out.println(name);
	}
}

实例化对象时如下图所示。

http://img1.sycdn.imooc.com//58a489980001d4bc05100192.jpg

7 回复 有任何疑惑可以回复我~
#1

昔日情瞳

抱歉一时手快写错了,不是重构,而是方法重载! // 重载一个 公开的 有参 构造方法
2017-02-16 回复 有任何疑惑可以回复我~

因为new 是静态加载类对象,需要调用无参的构造方法,而Void的无参构造方法是私有的,所有不能直接new出来。如果要实例化,只能通过Class.forName()方式。

2 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

类类型可以创建对象,照你这么说,void d= new void(); 应该也是可以的,可是为什么就不行了?请给解释。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信