`

Java克隆技术

阅读更多

通过克隆可以得到一个对象的完整复制。

  • 浅度克隆: 只是实现了对象表层的克隆,对于包含在对象内部的内容并没有克隆
  • 深度克隆: 对包含在对象内部的内容也进行克隆

实现克隆的方法:

1)实现Cloneable接口

2)重写Object类中的protected Object clone() throws CloneNotSupportedException方法并捕获CloneNotSupportedException异常

3)调用super.clone()返回对象

 

浅度克隆举例:

 

class Programmer implements Cloneable{
 private String name;
 private int age;
 private double sal;
 public Programmer(String name,int age,double sal){
  this.name=name;
  this.age=age;
  this.sal=sal;
 }
 
 public Object clone() throws CloneNotSupportedException{
  Programmer pg=(Programmer)super.clone();
  return pg;
 }

 public void changeInformation(String name,int age,double sal){
  this.name=name;
  this.age=age;
  this.sal=sal;
 }
 
 public String toString(){
  return "name:"+name+",age:"+age+",salary:"+sal;
 }
}

public class CloneTest{
 public static void main(String[] args){
 try{
  Programmer pg1=new Programmer("Jackson",23,1000);
  Programmer pg2=(Programmer)pg1.clone();
  pg2.changeInformation("Kevin",25,3000);
  System.out.println("pg1="+pg1);
  System.out.println("pg2="+pg2);
 }catch(CloneNotSupportedException e){
  System.out.println(e.getMessage());
  e.printStackTrace();
 }
 }
}

 

执行结果:

C:\javastudy>java CloneTest
pg1=name:Jackson,age:23,salary:1000.0
pg2=name:Kevin,age:25,salary:3000.0

C:\javastudy>

 

深度克隆举例:

 

对DeepProgrammer进行克隆时,同时对它包含的Manager也进行克隆。

 

class Manager implements Cloneable{
 private String name;
 private int age;
 private double salary;
 public Manager(String name,int age,double salary){
  this.name=name;
  this.age=age;
  this.salary=salary;
 }

 public Object clone() throws CloneNotSupportedException{
  Manager m=(Manager)super.clone();
  return m;
 }
 
 public void changeInformation(String name,int age,double salary){
  this.name=name;
  this.age=age;
  this.salary=salary;
 }

 public String toString(){
  return "M_name:"+name+",M_age:"+age+",M_salary:"+salary;
 }
}

class DeepProgrammer implements Cloneable{
 private String name;
 private int age;
 private double salary;
 private Manager m;
 
 public DeepProgrammer(String name,int age,double salary,Manager m){
  this.name=name;
  this.age=age;
  this.salary=salary;
  this.m=m;
 }

 public Object clone() throws CloneNotSupportedException{
  DeepProgrammer dp=(DeepProgrammer)super.clone();
  dp.setManager((Manager)m.clone());
  return dp;
 }
 
 public void changeInformation(String name,int age,double salary){
  this.name=name;
  this.age=age;
  this.salary=salary;
 }
 
 public void setManager(Manager m){
  this.m=m;
 }
 public Manager getManager(){
  return m;
 }
 public String toString(){
  return "name:"+name+",age:"+age+",salary:"+salary+"  "+m;
 }
}

public class DeepCloneTest{
 public static void main(String[] args){
 try{
  Manager m1=new Manager("Brown",34,10000);
  DeepProgrammer dp1=new DeepProgrammer("Jackson",26,5000,m1);
  DeepProgrammer dp2=(DeepProgrammer)dp1.clone();
  dp2.changeInformation("Black",30,8000);
  dp2.getManager().changeInformation("John",40,20000);
  System.out.println(dp1);
  System.out.println(dp2);
 }catch(CloneNotSupportedException e){
  System.out.println(e.getMessage());
  e.printStackTrace();
 }
 }
}

 

执行结果:

C:\javastudy>java DeepCloneTest
name:Jackson,age:26,salary:5000.0  M_name:Brown,M_age:34,M_salary:10000.0
name:Black,age:30,salary:8000.0  M_name:John,M_age:40,M_salary:20000.0

C:\javastudy>

分享到:
评论

相关推荐

    详解Java中的克隆技术

    在Java编程语言中,克隆技术是一个重要的概念,它允许我们创建一个对象的精确副本,即一个全新的对象,它具有与原对象相同的属性值。这个副本通常可以独立于原始对象存在和修改。克隆技术在处理那些需要复制对象但又...

    java克隆入门和深入

    java克隆技术的入门及深入研究,帮助读者更好的理解java克隆技术,掌握关键知识点。

    java 克隆详细示例

    为了能够创建一个与已有对象相同的新对象,我们通常会使用克隆技术。本文将深入探讨Java中的克隆机制,并通过具体示例来解释如何实现深拷贝与浅拷贝。 #### 二、克隆的基本概念 克隆是一种通过复制现有对象来创建...

    java 深克隆浅克隆

    克隆技术在处理复杂数据结构、避免对象共享以及实现对象复制等方面有着广泛的应用。Java提供了两种主要的克隆方式:深克隆和浅克隆。 1. 浅克隆(Shallow Clone): 浅克隆是通过调用对象的`clone()`方法来实现的,...

    克隆和序列化(Java )

    在Java编程语言中,克隆和序列化是两个重要的概念,它们在数据处理和对象管理中扮演着关键角色。下面将分别对这两个概念进行详细解释,并结合实例和源代码进行阐述。 **一、克隆** 1. **克隆定义**:克隆是指创建...

    java深度克隆

    4. **命令模式**:在实现命令模式时,为了记录命令执行前后的状态变化,可以使用深度克隆技术来保存命令执行前的状态。 综上所述,Java中的深度克隆是一种非常实用的技术,在很多场景下都有着广泛的应用。通过理解...

    对象克隆技术笔记

    031111_【第11章:Java常用类库】_对象克隆技术笔记

    java 对象克隆

    对于复杂的对象结构,可以使用序列化和反序列化技术来实现深克隆。首先,将对象序列化为字节数组,然后反序列化为新的对象。这种方法可以确保所有引用类型的对象也被复制。 ```java import java.io.*; public ...

    Java对象的深克隆与浅克隆详解.zip(wcb2003)

    在Java编程语言中,克隆是一种创建对象副本的技术,它允许我们复制一个对象的状态而不影响原始对象。克隆主要用于创建对象的备份、实现复制功能或者在多线程环境中避免共享状态。Java提供了两种主要的克隆方式:浅...

    clone 深度克隆对象

    深度克隆,也称为完全克隆,是一种创建新对象的技术,这个新对象不仅包含原始对象的所有属性值,还包含了嵌套对象的完整副本。这意味着如果一个对象中包含了其他对象的引用,深度克隆会创建这些引用对象的独立副本,...

    干货!资深java工程师面试要点大全+一年整理.pdf

    在Java开发领域,掌握核心知识点对于应对技术面试至关重要。根据提供的文件内容,我们可以提炼出一些关键的面试要点,并详尽地探讨它们。 首先,Java中所有类的父类是Object类。这是Java语言继承体系的基础,所有的...

    Java面试指南.pdf

    除此之外,本指南还涉及到了Collection与Collections的区别、IO与NIO的区别、Java中如何实现浅克隆与深克隆以及枚举类型是否可以序列化等问题。每个知识点的解释都不会过于深入,而是倾向于提供快速复习的要点,帮助...

    深入了解Java对象的克隆

    深入探索Java对象的克隆技术,对于每一个热衷于掌握Java编程语言的开发者来说,都是一个值得投入精力的研究领域。克隆技术在Java对象中扮演着重要角色,它让对象的复制成为可能,而这种复制方式与简单的赋值操作大有...

    Java概论(面试指南)

    Java求职面试指南还提到了Java的高级特性,比如序列化与反序列化,以及Java实现浅克隆与深克隆的机制。这些特性在实际的项目开发中非常关键,面试官往往会对这些知识点进行考察。求职者应该对如何处理Java对象的序列...

    java2python--java代码转python工具

    Java到Python的转换工具,如标题“java2python”所示,是编程领域中的一种实用技术,旨在帮助开发者将已有的Java代码转换为Python语言。这种转换对于那些熟悉Java但希望进入Python生态系统,或者想要利用Python特定...

    高级java程序设计课程教学大纲

    《高级JAVA程序设计》课程是一门面向计算机科学与技术、网络工程专业学生的专业选修课,旨在深化学生对JAVA语言的理解,尤其是面向对象程序设计的基本思想、概念和方法。课程内容涵盖JAVA语言的基础语法、面向对象...

    Java编程实现对象克隆(复制)代码详解

    在 Java 编程中,对象克隆是一种非常重要的技术,它允许开发者创建一个对象的副本,具有相同的属性和行为。对象克隆可以分为浅克隆和深克隆,浅克隆仅复制对象的引用,而深克隆则复制对象的所有属性。 对象克隆的...

    Java学习网站大全

    - **Java-forums.org**:专门讨论Java技术的论坛,可找到大量技术讨论帖。 - **DZone**:发布Java相关的文章和技术资讯,帮助开发者跟进行业动态。 4. **实战项目** - **GitHub上的开源项目**:参与或克隆实际...

Global site tag (gtag.js) - Google Analytics