Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对象类的clone()方法是如何工作的?_Java_Cloneable - Fatal编程技术网

Java 对象类的clone()方法是如何工作的?

Java 对象类的clone()方法是如何工作的?,java,cloneable,Java,Cloneable,Object class clone()方法具有本机实现,该实现创建子类的实例,并将源对象的状态复制到新创建的实例 问题: 对象类的clone()方法不调用子类的构造函数,那么它如何创建子类的实例呢 你的定义是错误的。clone()方法不创建子类的实例,而是创建调用clone()方法的类的实例。此实例包含其所有当前值。因此,它不会调用子类构造函数,但是会调用自己类的构造函数。克隆是以依赖于实现的方式在JVM中实现的。在OpenJDK中,第627行中的克隆实现为jvm\u clone。这将为对象分

Object class clone()方法具有本机实现,该实现创建子类的实例,并将源对象的状态复制到新创建的实例

问题:

  • 对象类的clone()方法不调用子类的构造函数,那么它如何创建子类的实例呢

  • 你的定义是错误的。clone()方法不创建子类的实例,而是创建调用clone()方法的类的实例。此实例包含其所有当前值。因此,它不会调用子类构造函数,但是会调用自己类的构造函数。

    克隆是以依赖于实现的方式在JVM中实现的。在OpenJDK中,第627行中的克隆实现为
    jvm\u clone
    。这将为对象分配内存,并从调用它的对象复制数据


    创建实例和调用构造函数是JVM级别的独立操作,因此本机实现不需要在创建实例后调用任何构造函数。通过使用C++中的下级JVM方法,不需要调用构造函数。< /P>回答了你的问题吗?我的问题很简单。Child childObj=新的子对象();childObj1=childObj.clone();childObj1==childObj//false。这意味着创建了新对象。现在我的问题是谁创建这个新对象,以及如何在不调用构造函数的情况下创建它。我对了解大学水平的Java克隆知识不感兴趣,这是否回答了你的问题?在写这篇评论的时候,我没有把它标记为负面,但是,现在我有了。这是因为您没有提供定义的来源,我建议您在期待有用的答案之前这样做。我的答案根本不是否定的。我假设你从某个网站上找到了这个定义,因为我知道这个网站可能让我通过使用它周围的上下文来更好地理解这个定义。由于您不想提供来源,我只能假设您自己发明了这个定义,我很抱歉地告诉您,它是不正确的,或者至少是用词有误。@DeepakAgrawal关于“让专家先阅读并评论一下”当你无法判断其他用户的专业知识时,请不要怀疑他们的专业知识。你的定义是可以理解的,但并不精确(“子类”通常指“从另一个类继承的类”,而不是“被克隆的类中的另一个类的实例”,我猜这就是你的实际意思),所以我可以看出MorganS42可能会感到困惑。这并不影响他们的专业知识。他们的评论中没有任何负面的东西。