首页  >  文章  >  Java  >  Java 中的对象克隆

Java 中的对象克隆

WBOY
WBOY原创
2024-08-30 16:04:50754浏览

作为最广泛使用的编程语言之一,Java 具有广泛的特性和功能。 Java 中的对象用于完成任务;你创建对象、改变、移动、调用它们各自的方法等等。众所周知,对对象的引用存储在Java中。因此,当我们有两个引用指向同一个对象时,任何一个对象的更改将完全反映在另一个对象的相同更改中。现在,这个因素可能并不总是对我们有利,因此克隆是阻止这种情况的答案。换句话说,创建此类对象的精确副本在 Java 中称为对象克隆。

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

根据定义,对象克隆是创建具有相似状态的原始对象的精确副本的过程。克隆时,所有属性都将转发到新克隆的对象,但可以根据需要更改或操作这些属性。必须在 Object 类中定义 clone() 方法。对于我们打算克隆对象的类来说,必须实现 java.lang.A Cloneable 接口。如果未能实现 Cloneable 接口,则会抛出异常。现在让我们看一下对象克隆的语法。

语法:

protected Object clone() throws CloneNotSupportedException

对于Object类,具体的克隆操作是通过clone方法来进行的。此方法将创建该类的精确副本,并使用对象字段的内容初始化所有字段。如果所提到的对象的类没有实现Cloneable接口,则会抛出“CloneNotSupportedException”。所有数组都被认为实现了 Cloneable 接口。这里,接口 Cloneable 没有在类 Object 上实现。因此,当我们在对象上调用克隆方法时,它会抛出运行时错误。

Java 中对象克隆的工作原理

现在让我们通过演示了解clone()方法的工作原理。

代码:

class obj_clone implements Cloneable{
int phone_code;
String f_name;
obj_clone(int phone_code,String f_name){
this.phone_code=phone_code;
this.f_name=f_name;
}
public Object clone()throws CloneNotSupportedException{
return super.clone();
}
public static void main(String args[]){
try{
obj_clone s1=new obj_clone(99,"sulaksh");
obj_clone s2=(obj_clone)s1.clone();
System.out.println(s1.phone_code+" "+s1.f_name);
System.out.println(s2.phone_code+" "+s2.f_name);
}catch(CloneNotSupportedException c){}
}
}

代码说明:如您所见,我们初始化了我们的类并实现了可克隆。在这里,检查实际的类是否实现了可克隆,并在对象中使用clone(),然后继续创建副本。然后我们有两个变量:电话号码(整数数据类型)和名字(字符串数据类型)。然后我们创建了 obj_clone 类的构造函数以及带有 .this 关键字的变量。正如您所看到的,我们的对象带有clone()方法和我们之前讨论过的异常CloneNotSupportedException。此外,这里的 super.clone() 可能会抛出 CloneNotSupportedException 错误,我们稍后捕获了该错误。

然后我们有了主类,并且我们对其中的所有内容都使用了 try-catch。然后我们创建了我们类的一个对象作为 s1 和 s2。我们已经传递了第一个对象 s1 的两个参数,然后我们实现了将 s1 克隆到 s2 的 clone() 方法。最后,我们有两个输出打印语句。在 try 块之外,我们有带有前面讨论的异常的 catch 块。在示例的第 8th 行,我们已经实现了语法部分中提到和解释的clone()。执行后,上述程序将打印输出“99sulaksh 99sulaksh”。有关输出,请参阅下面所附的屏幕截图。

输出:

Java 中的对象克隆

Java 中对象克隆的类型

现在我们已经了解了什么是对象克隆以及它是如何完成的,让我们了解 Java 支持哪些克隆类型。

  • 浅克隆:每当实现默认克隆方法时,都会发生浅克隆。浅克隆只是将对象的所有字段复制到新实例中。浅克隆由clone()支持。
  • 深度克隆:现在,每次我们不实现默认克隆方法时,我们都在练习深度克隆。深度克隆可以满足我们的需求。现在,这里的主要区别是深度克隆复制所有字段以及对象的值,而浅克隆仅复制字段。
  • 延迟克隆:Java 支持第三种克隆类型,它是上述两种克隆类型的组合;它被称为惰性克隆。对于何时使用哪种克隆类型并没有具体的规则;我们根据自己的需要来决定。

对象克隆的优点和缺点

现在,让我们了解对象克隆的优点和缺点。

优点

了解一切或每种方法都有其自身的局限性和功能,以下是克隆的优点。

  • 它节省时间和工作,因为克隆是一种节省时间的方法;您不必编写相同的长代码。
  • 在已开发的项目上实施时,克隆是复制对象的最有效方法。
  • 它有最快的方法来使用 Clone() 复制数组。

缺点

就像前面提到的,每种方法都有其局限性和功能,现在让我们了解一下 Clone() 的缺点。

  • 为了让 JVM 理解我们将使用clone(),我们必须实现 Cloneable 接口,即使这个可克隆接口没有任何方法。
  • 对于深克隆,我们必须重写object.clone(),因为它基本上支持浅克隆。
  • 我们无法控制对象构造,因为 clone() 不会调用任何构造函数。
  • 基本上,要实现object.clone(),我们必须在代码中进行相当多的更改,从Cloneable接口的实现开始,然后是clone()方法定义以处理CloneNotSupportedException等。

正确理解clone()或任何其他方法的优点和缺点,实现如此精彩的方法和函数可以让程序员受益匪浅。

结论

我们了解了clone()是什么、它的功能和用途。深克隆和浅克隆之间的区别以及惰性克隆。浅克隆仅复制字段,而深克隆复制字段和值,可以根据需要实施。而惰性复制则是两者的结合。我们也了解了克隆的优点和缺点()。

以上是Java 中的对象克隆的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn