`

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提供了两种主要的克隆方式:深克隆和浅克隆。 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语言继承体系的基础,所有的...

    Java2核心技术.part5

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    Java概论(面试指南)

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

    java2python--java代码转python工具

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

    Java面试指南.pdf

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

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

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

    Java学习网站大全

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

Global site tag (gtag.js) - Google Analytics