Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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 超级';克隆人是干什么的?_Java - Fatal编程技术网

Java 超级';克隆人是干什么的?

Java 超级';克隆人是干什么的?,java,Java,我正在从effectivejava 它表示在clone中,第一个要调用的方法必须是super.clone() 在这种情况下,我想最终我们会调用java.lang.Object的clone,并将其提升到层次结构链上。 但我认为该对象的克隆没有任何作用。 查看我看到的代码: protected native Object clone()抛出CloneNotSupportedException并且没有实现。 但是从这一段来看,如果一个类只有调用 (ClassX)super.clone()足以创建克隆。

我正在从
effectivejava

它表示在
clone
中,第一个要调用的方法必须是
super.clone()

在这种情况下,我想最终我们会调用
java.lang.Object
clone
,并将其提升到层次结构链上。
但我认为该对象的克隆没有任何作用。
查看我看到的代码:
protected native Object clone()抛出CloneNotSupportedException并且没有实现。
但是从这一段来看,如果一个类只有调用
(ClassX)super.clone()
足以创建克隆。

但是怎么做呢
super.clone
属于
对象

clone()是Java中用于对象复制的方法。在Java中,对象是通过引用变量操作的,没有用于复制对象的操作符赋值操作符复制引用,而不是对象。clone()方法提供了缺少的功能。

clone()是Java中用于对象复制的方法。在Java中,对象是通过引用变量操作的,没有用于复制对象的操作符赋值操作符复制引用,而不是对象。clone()方法提供了这个缺少的功能。

没错,当你克隆一个对象时,你应该总是调用
super.clone()
(作为第一句话),然后手动克隆对象的其余部分,这是因为当你克隆一个对象时,你必须确保对象的超类部分也以正确的方式得到克隆


如果一个对象不支持克隆,它会抛出
CloneNotSupportedException
,这意味着如果您尝试克隆一个超级对象,但得到了异常,则无法在子类型中实现克隆对象,并且无法克隆该对象。。。有几种情况下禁止对象克隆操作是正确的。

是正确的,克隆对象时,应始终调用
super.clone()
(作为第一条语句),然后手动克隆对象的其余部分,这是因为当你克隆一个对象时,你必须确保对象的超类部分也以正确的方式得到克隆


如果一个对象不支持克隆,它会抛出
CloneNotSupportedException
,这意味着如果您尝试克隆一个超级对象,但得到了异常,则无法在子类型中实现克隆对象,并且无法克隆该对象。。。有几种情况下禁止对象克隆操作是正确的。

对象中的此声明

  protected native Object clone() throws CloneNotSupportedException;
。。。表示
克隆
方法在本机代码中实现;i、 幕布后面正在上演魔术


您可以确信,
Object.clone()
确实做了一些事情。。。前提是您已将类声明为实现
Cloneable
。但它的作用不能用普通Java来表示。

此声明在对象中

  protected native Object clone() throws CloneNotSupportedException;
。。。表示
克隆
方法在本机代码中实现;i、 幕布后面正在上演魔术


您可以确信,
Object.clone()
确实做了一些事情。。。前提是您已将类声明为实现
Cloneable
。但是它的功能不能用普通的Java来表达。

这本书还应该说,使用clone()不是一个好主意。。。。您遇到的问题是,您必须依赖于正确实现该方法的超类,否则您将陷入麻烦。要正确克隆对象,必须复制所有字段(如果文件是基本的,那么它们显然是不可变的,因此可以使用=而不是克隆来复制引用,就像复制任何不可变对象一样)。请尝试复制构造函数或静态工厂方法,而不是使用克隆。更好。
Object#clone
作为本机方法实现。看这本书还应该说,使用clone()不是一个好主意。。。。您遇到的问题是,您必须依赖于正确实现该方法的超类,否则您将陷入麻烦。要正确克隆对象,必须复制所有字段(如果文件是基本的,那么它们显然是不可变的,因此可以使用=而不是克隆来复制引用,就像复制任何不可变对象一样)。请尝试复制构造函数或静态工厂方法,而不是使用克隆。更好。
Object#clone
作为本机方法实现。看到了吗,它对基本类型有效?也就是说,是否有类似于
memcopy
?它有点像memcopy。它在底层复制所有字段,以及对象头中的一些隐藏信息。那么它适用于基本类型吗?也就是说,是否有类似于
memcopy
?它有点像memcopy。它对所有字段和对象标题中的一些隐藏信息进行低级复制。