在Java中,clone()方法的重要性是什么?

2023年 9月 14日 82.8k 0

在Java中,clone()方法的重要性是什么?

clone()方法用于创建实现Cloneable接口的类的对象副本。默认情况下,它会逐字段复制,因为 Object 类不知道其对象调用此方法的特定类的成员。因此,如果该类仅具有原始数据类型成员,则将创建该对象的新副本,并返回对新对象副本的引用。但是,如果类包含任何类类型的成员,则仅复制对这些成员的对象引用,因此原始对象和克隆对象中的成员引用都引用同一对象。

如果我们尝试对未实现 Cloneable  接口的类的对象调用 clone() 方法,我们将收到 CloneNotSupportedException  。该接口是一个标记接口,该接口的实现仅表明可以在实现类的对象上调用Object.clone()方法。

语法

protected Object clone() throws CloneNotSupportedException

登录后复制

我们可以通过两种方式实现clone()方法

浅复制

这是Object.clone()提供的默认克隆功能的结果 方法(如果类也有非基本数据类型成员)。在浅复制的情况下,克隆对象还引用原始对象所引用的同一对象,因为仅复制对象引用,而不复制引用的对象。

示例

public class ShallowCopyTest {
   public static void main(String args[]) {
      A a1 = new A();
      A a2 = (A) a1.clone();
      a1.sb.append("Tutorialspoint!");
      System.out.println(a1);
      System.out.println(a2);
   }
}
class A implements Cloneable {
   public StringBuffer sb = new StringBuffer("Welcome to ");
      public String toString() {
         return sb.toString();
      }
   public Object clone() {
      try {
         return super.clone();
      } catch(CloneNotSupportedException e) {
      }
      return null;
   }
}

登录后复制

输出

Welcome to Tutorialspoint!
Welcome to Tutorialspoint!

登录后复制

深度复制

我们需要为非基本类型的类重写clone()方法成员来实现深度复制,因为它还需要克隆成员对象,而默认克隆机制不会这样做。

示例

public class DeepCopyTest {
   public static void main(String args[]) {
      A a1 = new A();
      A a2 = (A) a1.clone();
      a1.sb.append(" TutorialsPoint!");
      System.out.println(a1);
      System.out.println(a2);
   }
}
class A implements Cloneable {
   public StringBuffer sb = new StringBuffer("Welcome to ");
   public String toString() {
      return sb.toString();
   }
   public Object clone() {
      try {
         A a = (A) super.clone();
         a.sb = new StringBuffer(sb.toString());
         return a;
      }
      catch(CloneNotSupportedException e) {
      }
      return null;
   }
}

登录后复制

输出

Welcome to TutorialsPoint!
Welcome to

登录后复制

以上就是在Java中,clone()方法的重要性是什么?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论