`
rafale35
  • 浏览: 20585 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SerialCloneTest 对象利用流方式clone

 
阅读更多

 

 

 

package com.io.SerialCloneTest;

/**
   @version 1.20 17 Aug 1998
   @author Cay Horstmann
*/

import java.io.*;
import java.util.*;

public class SerialCloneTest
{  
   public static void main(String[] args)
   {  
      Employee harry = new Employee("Harry Hacker", 35000, 1989, 10, 1);
      // clone harry
      Employee harry2 = (Employee) harry.clone();

      // mutate harry
      harry.raiseSalary(10);

      // now harry and the clone are different
      System.out.println(harry);
      System.out.println(harry2);
   }
}

/**
   A class whose clone method uses serialization.
*/
class SerialCloneable implements Cloneable, Serializable
{  
   public Object clone()
   {  
      try
      {  
         // save the object to a byte array
         ByteArrayOutputStream bout = new ByteArrayOutputStream();
         ObjectOutputStream out = new ObjectOutputStream(bout);
         out.writeObject(this);
         out.close();

         // read a clone of the object from the byte array
         ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
         ObjectInputStream in = new ObjectInputStream(bin);
         Object ret = in.readObject();
         in.close();

         return ret;
      }  
      catch (Exception e)
      {  
         return null;
      }
   }
}

/**
   The familiar Employee class, redefined to extend the
   SerialCloneable class. 
*/
class Employee extends SerialCloneable
{  
   public Employee(String n, double s, int year, int month, int day)
   {  
      name = n;
      salary = s;
      GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
      hireDay = calendar.getTime();
   }

   public String getName()
   {  
      return name;
   }

   public double getSalary()
   {  
      return salary;
   }

   public Date getHireDay()
   {  
      return hireDay;
   }

   public void raiseSalary(double byPercent)
   {  
      double raise = salary * byPercent / 100;
      salary += raise;
   }

   public String toString()
   {  
      return getClass().getName()
         + "[name=" + name
         + ",salary=" + salary
         + ",hireDay=" + hireDay
         + "]";
   }

   private String name;
   private double salary;
   private Date hireDay;
}
 


 

 

 

分享到:
评论

相关推荐

    C#中Clone一个对象的值到另一个对象案例 c#经典案例.pdf

    C# 中 Clone 一个对象的值到另一个对象案例 C# 中 Clone 一个对象的值到另一个对象案例是一种常见的编程需求。在这篇文章中,我们将学习如何使用 C# 中的 Clone 方法来复制一个对象的值到另一个对象。 什么是 ...

    clone()方法示例(对象克隆)_对象克隆_nervouse78_源码

    在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在处理对象复制和数据持久化时。本示例将深入探讨`clone()`方法的工作原理、使用场景以及如何在实际编程中应用。首先,我们来理解一下`clone()`方法的...

    clone 深度克隆对象

    对于第二种方式,我们首先将对象序列化为字节流,然后将字节流反序列化回新的对象。这种方法可以自动处理嵌套对象的复制,但效率相对较低,因为它涉及到I/O操作。同时,这种方法适用于所有实现了Serializable接口的...

    java中的指针,引用及对象的clone

    了解Java中对象的传递方式和克隆机制对于编写高效、安全的代码至关重要。浅拷贝和深拷贝的选择取决于具体的应用场景,需要根据实际情况进行权衡。通过深入理解这些概念,开发者可以更好地利用Java的强大功能来构建高...

    深化理解JavaScript中的对象复制(Object Clone)_.docx

    2. **自定义`clone()`方法**:我们可以为对象添加一个`clone()`方法,递归地复制所有属性。 ```javascript Object.prototype.clone = function() { var copy = (this instanceof Array) ? [] : {}; for (let attr...

    java Clone

    Java中的`clone`方法是Java语言提供的一种复制对象的方式,它允许创建一个对象的副本,这个副本与原对象具有相同的属性值,但它们是两个独立的对象,修改副本不会影响原对象。`clone`方法存在于Java的`java.lang....

    对象克隆(clone)详解.docx

    【对象克隆(clone)详解】 对象克隆是Java编程中的一个重要概念,它允许我们创建一个已有对象的副本,而不影响原始对象。...理解这两种克隆方式的区别和应用场景,可以帮助我们在编程中更有效地管理和复制对象。

    clone()示例源码

    在描述中提到的博客链接(由于无法直接访问,以下内容基于通常的`clone()`使用方式解释)可能会详细阐述如何在自定义类中重写`clone()`方法以实现更灵活的复制行为。通常,为了能够正确地克隆一个对象,你需要确保类...

    java_clone用法

    在Java中,`clone`方法提供了一种快速复制对象的方式。它属于`Object`类的一部分,但需要显式地在子类中声明并实现`Cloneable`接口才能正常使用。本文将详细介绍`clone`的基本概念、工作原理以及如何实现浅拷贝和深...

    深入理解JavaScript中的对象复制(Object Clone)

    在深入探讨JavaScript中的对象复制(Object Clone)时,首先需要明确JavaScript中的对象复制分为浅复制(Shallow Copy)和深复制(Deep Copy)。浅复制指的是创建一个新对象,这个对象有着原始对象属性值的一份精确...

    java clone的小例子

    在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在对象复制和克隆方面。这个小例子将帮助初学者理解如何在Java中使用`clone()`来创建对象的副本。让我们深入探讨`clone()`方法以及它在实际编程中的...

    Clone详解.doc

    Java中的克隆(Clone)机制是一种创建对象副本的方法,它允许程序员复制一个对象的状态,而不会影响原始对象。克隆在编程中常用于创建对象的独立副本,使得新副本与原对象之间相互独立,对其中一个对象的修改不会...

    PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析

    本文实例讲述了PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法。分享给大家供大家参考,具体如下: 1.对象克隆 clone PHP4面向对象功能一个很大的缺点,是将对象视为另一种数据类型,这使得很多常见的...

    java clone

    然而,由于`clone`的复杂性和容易出错,许多开发者更倾向于使用`copy-constructor`或者`Builder`模式来创建对象的副本,这两种方式更加直观和可控。 总结来说,Java中的`clone`方法是一种快速创建对象副本的手段,...

    Java深浅clone

    在Java编程语言中,`Cloneable`接口和`clone()`方法是两个重要的概念,它们用于对象复制。在本文中,我们将深入探讨Java中的浅克隆(shallow clone)和深克隆(deep clone),并结合测试代码进行分析。 首先,让...

    Java中的克隆(Clone)机制

    在Java编程语言中,克隆(Clone)机制是一种创建对象副本的方法,它允许开发者创建一个已有对象的新实例,这个新实例与原对象具有相同的属性值,但却是两个独立的对象,彼此的操作不会互相影响。克隆机制在某些情况...

    JAVA创建对象的四种方法

    JAVA 创建对象的四种方法 ...- 本文总结了 Java 中创建对象的四种方法,每种方法都有其优缺,选择哪种方式创建对象取决于具体的应用场景和需求,了解不同的创建对象方式可以帮助开发者更好地设计和实现 Java 应用程序。

    git代码clone,submodule

    ### Git Clone与Submodule知识点详解 #### 一、Git Clone命令 `git clone` 命令用于克隆一个远程仓库到本地。当你需要获取一个项目的全部文件时,这...熟练掌握这些命令可以帮助你更高效地管理工作流和代码版本控制。

    CLONE 10-ex

    "Clone"通常指的是在计算机科学中创建一个与原始对象完全相同的复制品。"10-ex"可能代表这是第十版的扩展版本,而“LV2”可能意味着这是该版本的第二级或者第二个阶段。 在IT领域,克隆技术有着广泛的应用。例如,...

Global site tag (gtag.js) - Google Analytics