Java 理解克隆方法

Java 理解克隆方法,java,clone,Java,Clone,我正在阅读J.Bloch的高效Java,现在我正在使用clone方法。他提到没有调用任何构造函数。但是我没有在房间里找到它。第二件事是: 规定 “不调用构造函数”太强了。行为良好的克隆人 方法可以调用构造函数来创建克隆内部的对象 在建工程如果类是final,clone甚至可以返回 由构造函数创建的对象 这对我来说似乎有点矛盾。当他提到没有调用构造函数时,他说行为良好的克隆可以调用构造函数 你不能解释一下他的意思吗?有两件事不同: 您自己在自己的类中实现的clone()方法应该遵循一些规则 现有O

我正在阅读J.Bloch的高效Java,现在我正在使用
clone
方法。他提到没有调用任何构造函数。但是我没有在房间里找到它。第二件事是:

规定 “不调用构造函数”太强了。行为良好的克隆人 方法可以调用构造函数来创建克隆内部的对象 在建工程如果类是final,clone甚至可以返回 由构造函数创建的对象

这对我来说似乎有点矛盾。当他提到没有调用构造函数时,他说行为良好的克隆可以调用构造函数


你不能解释一下他的意思吗?

有两件事不同:

  • 您自己在自己的类中实现的
    clone()
    方法应该遵循一些规则
  • 现有
    Object.clone()
    方法的实现

  • 我相信,当J.Bloch谈到“没有调用任何构造函数”时,他假设存在
    Object.clone()
    方法的行为。但是您引用的引用是关于您自己实现的
    clone()
    方法,在某些情况下,该方法可以使用构造函数构造新对象,甚至可以返回这样的对象。

    有两种不同的东西:

  • 您自己在自己的类中实现的
    clone()
    方法应该遵循一些规则
  • 现有
    Object.clone()
    方法的实现

  • 我相信,当J.Bloch谈到“没有调用任何构造函数”时,他假设存在
    Object.clone()
    方法的行为。但您引用的引用是关于您自己实现的
    clone()
    方法,在某些情况下,该方法可以使用构造函数构造新对象,甚至可以返回这样的对象。

    实现
    Cloneable
    接口的类可以调用
    clone()
    对象类中的方法,而不具有
    CloneNotSupportedException
    。对象类中的
    clone()
    的签名告诉我们,如果调用继承的克隆,为什么不调用构造函数。它是本机代码,而不是纯Java

    protected native Object clone() throws CloneNotSupportedException;
    

    请注意,这只是一个浅拷贝实现

    实现
    Cloneable
    接口的类可以从对象类调用
    clone()
    方法,而无需
    CloneNotSupportedException
    。对象类中的
    clone()
    的签名告诉我们,如果调用继承的克隆,为什么不调用构造函数。它是本机代码,而不是纯Java

    protected native Object clone() throws CloneNotSupportedException;
    

    请注意,这只是一个浅拷贝实现

    那么不调用构造函数的要求在哪里呢?我检查了JavaSE5和JavaSE6的javadocs,没有这样的引用。他在哪里找到的?@St.Antario请检查我的答案。那么不调用构造函数的要求在哪里呢?我检查了JavaSE 5和6的javadocs,没有这样的报价。他在哪里找到的?@St.Antario请检查我的答案。