【发布时间】:2011-03-11 00:08:54
【问题描述】:
我们知道我们可以通过使用类加载器/对象克隆/对象序列化来实例化一个没有new 关键字的对象。当我使用这些技术创建对象时,是否调用了构造函数?
【问题讨论】:
-
您总是可以编写一个在构造函数中向控制台写入内容的类并尝试所有技术。成为实验者!
标签: java oop constructor instantiation
我们知道我们可以通过使用类加载器/对象克隆/对象序列化来实例化一个没有new 关键字的对象。当我使用这些技术创建对象时,是否调用了构造函数?
【问题讨论】:
标签: java oop constructor instantiation
对于Object.clone,没有调用构造函数。
对于序列化,最派生的不可序列化基类无参数构造函数被调用。通常通过加载不验证的字节码来实现。构造函数必须可供最基础的可序列化类访问。
【讨论】:
据我所知,这三个都使用构造函数甚至序列化。
http://java.sun.com/j2se/1.4.2/docs/api/java/io/Serializable.html
仅当它扩展的类具有可访问的无参数构造函数来初始化类的状态时,子类型才可以承担此责任。如果不是这种情况,则声明一个类 Serializable 是错误的
【讨论】: