美文网首页
Java Cloneable接口

Java Cloneable接口

作者: taj3991 | 来源:发表于2020-03-11 14:19 被阅读0次

Cloneable接口

clone:它允许在堆中克隆出一块和原对象一样的对象,并将这个对象的地址赋予新的引用。
Java 中 一个类要实现clone功能 必须实现 Cloneable接口,否则在调用 clone() 时会报 CloneNotSupportedException 异常。

Java中所有类都默认继承java.lang.Object类,在java.lang.Object类中有一个方法clone(),这个方法将返回Object对象的一个拷贝。
要说明的有两点:

  • 是拷贝对象返回的是一个新对象,而不是一个引用;
  • 二是拷贝对象与用 new操作符返回的新对象的区别就是这个拷贝已经包含了一些原来对象的信息,而不是对象的初始信息。

如果一个类重写了 Object 内定义的 clone()方法 ,需要同时实现 Cloneable 接口(虽然这个接口内并没有定义 clone() 方法),否则会抛出异常,也就是说, Cloneable 接口只是个合法调用 clone() 的标识(marker-interface)。

class CloneClass implements Cloneable{
 public int aInt;
 public Object clone(){
  CloneClass o = null;
  try{
   o = (CloneClass)super.clone();
  }catch(CloneNotSupportedException e){
   e.printStackTrace();
  }
  return o;
 }
}

有三个值得注意的地方:

  • 一是为了实现clone功能,CloneClass类实现了Cloneable接口,这个接口属于java.lang 包,java.lang包已经被缺省的导入类中,所以不需要写成java.lang.Cloneable;

  • 二是重载了clone()方 法;

  • 三是在clone()方法中调用了super.clone(),这也意味着无论clone类的继承结构是什么样的,super.clone()直接或 间接调用了java.lang.Object类的clone()方法。

  • Object类的clone()方法是一个native方法,native方法的效率一般来说都是远高于java中的非native方法。这也解释了为 什么要用Object中clone()方法而不是先new一个对象,然后把原始对象中的信息赋到新对象中,虽然这也实现了clone功能,但效率较低。

  • Object类中的clone()方法还是一个protected属性的方法。这也意味着如果要应用clone()方法,必须继承Object类,在 Java中所有的类是缺省继承Object类的,也就不用关心这点了。

  • 然后重载clone()方法。还有一点要考虑的是为了让其它类能调用这个clone 类的clone()方法,重载之后要把clone()方法的属性设置为public。

原文

https://blog.csdn.net/xiaomingdetianxia/article/details/74453033

相关文章

  • Cloneable

    如何实现Cloneable接口?1、让该类实现java.lang.Cloneable接口;实现Cloneable接...

  • Java Cloneable接口

    Cloneable接口 clone:它允许在堆中克隆出一块和原对象一样的对象,并将这个对象的地址赋予新的引用。Ja...

  • Java对象克隆

    引自:Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨https:/...

  • Java深拷贝浅拷贝

    java.lang.Cloneable接口 一个带空体的接口称为标记接口(marker interface) 既不...

  • HashSet

    HashSet实现了接口Set, Cloneable, java.io.Serializable,继承了Abstr...

  • Cloneable的实现原理

    Cloneable是一个标记接口,里面没有任何的方法。 java的一个类,如果要使用Cloneable实现拷贝功能...

  • Java 常见接口解析(Cloneable 接口)

    Cloneable 接口 clone接口属于标志性接口(接口内不含有任何方法)。我们可以实现这个接口后,重写Obj...

  • 使用对象序列化和反序列化实现深度克隆

    java对象进行克隆,分为浅克隆和深克隆 浅克隆需要实现java.lang.Cloneable接口,并重写java...

  • Cloneable接口

    Cloneable接口的官方解释 1.Cloneable属于标记接口,接口内部没有方法和属性。实现该接口的类的实例...

  • Cloneable 接口

    浅拷贝(shallow clone)和深拷贝(deep clone) 浅拷贝是指拷贝对象时仅仅拷贝对象本身和对象中...

网友评论

      本文标题:Java Cloneable接口

      本文链接:https://www.haomeiwen.com/subject/jjhcjhtx.html