我们知道我们可以通过使用classloader / object cloning / object serialization来实例化一个没有new
关键字的对象。当我使用这些技术创建一个对象时,构造函数是否被调用?
答案 0 :(得分:4)
对于Object.clone
,不会调用任何构造函数。
对于序列化,调用派生程度最大的非可序列化基类no-arg构造函数。通常通过加载不验证的字节码来实现。最基本的可序列化类必须可以访问构造函数。
答案 1 :(得分:1)
据我所知,三者都使用构造函数甚至序列化。
http://java.sun.com/j2se/1.4.2/docs/api/java/io/Serializable.html
只有当它扩展的类具有可访问的no-arg构造函数来初始化类的状态时,子类型才可以承担此责任。如果不是这种情况,则声明一个Serializable类是错误的