先定义一个标准的javabean对象,并实现持久化接口
请看代码:
package com.ben.clone;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Person implements Serializable
{
private int age;
private String name;
private char sex;
private List sth = new ArrayList();
private Map bt = new HashMap();
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public char getSex()
{
return sex;
}
public void setSex(char sex)
{
this.sex = sex;
}
public List getSth()
{
return sth;
}
public void setSth(List sth)
{
this.sth = sth;
}
public Map getBt()
{
return bt;
}
public void setBt(Map bt)
{
this.bt = bt;
}
}
再写个类实现二进制克隆对象:
package com.ben.clone;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.StreamCorruptedException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ByteCloneTest
{
/**
* <pre>
* 以二进制方式克隆对象
* </pre>
* @param src 被克隆的对象
* @return 克隆的对象
*/
public static final Object byteClone(Object src)
{
try
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(baos);
out.writeObject(src);
out.close();
ByteArrayInputStream bin = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bin);
Object clone = in.readObject();
in.close();
return (clone);
}
catch (ClassNotFoundException e)
{
throw new InternalError(e.toString());
}
catch (StreamCorruptedException e)
{
throw new InternalError(e.toString());
}
catch (IOException e)
{
throw new InternalError(e.toString());
}
}
public static void main(String[] args)
{
Person p = new Person();
p.setAge(80);
p.setName("jerry");
p.setSex('F');
List list = new ArrayList();
list.add("apple");
list.add("orange");
list.add("banana");
Map map = new HashMap();
map.put("哥哥", "liuliu");
map.put("姐姐", "linlin");
map.put("李李", "lili");
p.setBt(map);
p.setSth(list);
Person ps = (Person)ByteCloneTest.byteClone(p);
ps.setName("benlsoft");
System.out.println("p----"+p.getName());
System.out.println("ps---"+ps.getName());
}
}
发现两个克隆的对象包含的对象都不是引用对象。这样就实现了深度克隆,不敢想象。
分享到:
相关推荐
ion-java, Java流解析器/序列化程序 一个Java实现的数据符号 。 设置这个库包含一个 git模块 ion-tests,它保存了 ion-java 测试单元使用的测试...克隆 ion-java 存储库并初始化它的ion-tests 模块的最简单方法是运行
62. 如何实现对象克隆? 24 63. 深拷贝和浅拷贝区别是什么? 28 六、Java Web 28 64. jsp 和 servlet 有什么区别? 28 65. jsp 有哪些内置对象?作用分别是什么? 29 66. 说一下 jsp 的 4 种作用域? 29 67. session...
62.如何实现对象克隆? 63.深拷贝和浅拷贝区别是什么? 六、Java Web 64.jsp 和 servlet 有什么区别? 65.jsp 有哪些内置对象?作用分别是什么? 66.说一下 jsp 的 4 种作用域? 67.session 和 cookie 有什么区别? ...
克隆ion-java存储库并初始化其ion-tests子模块的最简单方法是运行以下命令。 $ git clone --recursive https://github.com/amzn/ion-java.git ion-java或者,可以通过运行以下命令与克隆独立地初始化子模块。 $ git...
Dynatrace OpenKit-Java参考实现 :information: 我们将默认分支名称更改为main 。 您可以在上找到更新本地克隆的必要步骤。 我们也建议您重命名fork中的默认分支。 什么是OpenKit? OpenKit通过检测那些应用程序的...
《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...
简单做个测试吧: package org.shirdrn.lucene; import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache....
宝贝谷歌### 任务:基于 Lucene 全文搜索制作一个简单的“Google”克隆。 要求:一个极其简单的 Web 应用程序,具有以下一组页面: 第 1 页: /index | (GET 方法)包含一个由文本字段和“索引”按钮组成的表单。 ...
* 实现最简单的 SpringBoot + Mybatis + Freemarker 网页增删改查功能,适合新接触 Java 和 SpringBoot 的同学参考 * 代码中连接的是云端的测试数据库,长期有效 * 推荐使用 IDEA 开发环境 # 开发环境部署 * 克隆或...
这是最简单的方法,但显然不是面试官想要的答案。 最后告知我:利用Array的slice方法。示例如下: 代码如下:var ary = [1,2,3];//源数组 var ary2 = ary.slice(0);//克隆一个新数组 console.log(ary2); /* 改变ary2...
教程 SourcererCC是基于令牌的代码克隆检测器,用于超大型代码库和Internet规模的项目存储库。 SourcererCC可以在许多粒度级别上工作,例如以任何语言检测文件... 该VM是使用SourcererCC进行自己的克隆分析的最简单方法
简单地说,我的目标是学习和理解 Java 的基础知识。 我希望我对 JavaScript 和 Swift 的理解能让我更轻松地过渡到学习 Java。 待办事项清单 完成书中的练习题 指示 克隆存储库: $ git clone git@github....
上入门的最简单方法是从 上下载完整的安装程序包,并阅读也在那里托管的 。 如果你想使用GitHub上托管的尖端开发版本,那么你必须自己编译它。 从源代码编译 视窗 您将需要 、 和 。 您还需要一个 Fortran 编译器,...
下面的文章包含与此实现有关的最重要的参考。 Arlind Nocaj,Ulrik Brandes,“计算Voronoi树图:更快,更简单,且与分辨率无关”,计算机图形学论坛,第一卷,第1期。 31号3,2012年6月,第855-864页 请注意,...
java实现新建文件夹OpenShift“oc cluster ...最简单的方法是克隆这个存储库,这样你就可以通过“git pull”命令更新脚本。 但是您始终可以在 . Linux 在 linux 上(在 Fedora 25 上测试过): git clone ...
在一个简单的游乐场中包含最常用的代码构造,可用于学习JAVA代码原理。 类中的每个程序包都包含一些JAVA原则以及可用于学习目的的注释。 安装 安装IDE(推荐:IntelliJ IDEA) 安装Java JDK(从以下下载: : ) ...