【问题标题】:Object instance without new?没有新的对象实例?
【发布时间】:2011-03-11 00:08:54
【问题描述】:

我们知道我们可以通过使用类加载器/对象克隆/对象序列化来实例化一个没有new 关键字的对象。当我使用这些技术创建对象时,是否调用了构造函数?

【问题讨论】:

  • 您总是可以编写一个在构造函数中向控制台写入内容的类并尝试所有技术。成为实验者!

标签: java oop constructor instantiation


【解决方案1】:

对于Object.clone,没有调用构造函数。

对于序列化,最派生的不可序列化基类无参数构造函数被调用。通常通过加载不验证的字节码来实现。构造函数必须可供最基础的可序列化类访问。

【讨论】:

    【解决方案2】:

    据我所知,这三个都使用构造函数甚至序列化。

    http://java.sun.com/j2se/1.4.2/docs/api/java/io/Serializable.html

    仅当它扩展的类具有可访问的无参数构造函数来初始化类的状态时,子类型才可以承担此责任。如果不是这种情况,则声明一个类 Serializable 是错误的

    【讨论】:

    • 那句话出自哪里?您应该(理想情况下)提供链接或提供引用。
    • 我认为这个引用只适用于不可序列化类的子类。在这种情况下,超类必须声明一个无参数构造函数。可序列化类本身的字段在不调用构造函数的情况下进行初始化。
    猜你喜欢
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多