Java克隆对象
来源:互联网 发布:win7安装linux操作系统 编辑:程序博客网 时间:2024/06/05 20:52
一。 使用Cloneable接口
- 实现Cloneable接口的类都具备被拷贝的能力,拷贝在内存中进行,比new生成对象性能明显提升;
- clone方法是Object类的protected方法,也就是在用户编写的代码中不能直接调用。为此必须重写定义clone方法,并声明为public,
- Cloneable接口的出现与接口正常使用没有关系,是一个空接口,它只是一个标记表示一个对象需要克隆,如果一个对象需要克隆,而没有实现Cloneable接口,就会产生一个(checked exception)
- Clone()方法存在与Object对象中,但是其不会将对象的全部属性都拷贝,而是有选择的拷贝
- 基本类型:
- 对象:如果变量是一个实例对象,只拷贝地址引用;
- String字符串:拷贝地址引用,但是修改时,会从字符串池中重新生成新的字符串,原来的保持不变;
- 对于Clone实现对象的拷贝:需要新建大量的对象,工程量大可以使用序列化来实现对象的拷贝
//Person.javapublic class Person implements Cloneable {private String name;public String getName() {return name;}public void setName(String aName) {name = aName;}public Person clone() {Person person = null;try {person = (Person) super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return person;}public Person() {}}
public class CloneTest {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubPerson a = new Person();a.setName("yang");Person b = a.clone();b.setName("Qiang");System.out.println("A name :" + a.getName());}}
二、使用序列化来实现对象的拷贝
- 在内存中通过字节流的拷贝是比较容易的,把木对象写入到一个字节流中,再从字节流中毒出来,这样可以创建一个新的对象,且新对象与木对象不存在引用共享的问题,实现的对象的深拷贝
public class CloneUtils { @SuppressWarnings("unchecked") public static <T extends Serializable> T clone(T obj){ T cloneObj = null; try { //写入字节流 ByteArrayOutputStream out = new ByteArrayOutputStream(); ObjectOutputStream obs = new ObjectOutputStream(out); obs.writeObject(obj); obs.close(); //分配内存,写入原始对象,生成新对象 ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray()); ObjectInputStream ois = new ObjectInputStream(ios); //返回生成的新对象 cloneObj = (T) ois.readObject(); ois.close(); } catch (Exception e) { e.printStackTrace(); } return cloneObj; } }
- 使用该工具类的对象必须实现Searializable接口,否则无法克隆,
- 例子:
publicclass Email implements Serializable{ } publicclass Client{publicstatic void main(){Emailemail = new Email();Emailcopy = CloneUtils.clone(email);}}
0 0
- java克隆对象
- java 中克隆对象
- java中的对象克隆
- 浅谈java 对象克隆
- java对象的克隆
- java对象克隆clone
- java 对象 克隆 clone
- Java clone()克隆对象
- java对象的克隆
- JAVA 对象克隆clone
- java对象的克隆
- java 对象的克隆
- java对象克隆简介
- 模拟Java对象克隆
- Java克隆对象
- Java对象深度克隆
- java对象克隆clone
- JAVA对象的克隆
- 黑马程序员——正则表达式
- Myeclipse加载优化--工欲善其事必先利其器
- 指向数组的指针与指向数组首元素的指针
- Ajax动态加载数据库
- Oracle 11g ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
- Java克隆对象
- 初学WebService,jax-ws实现webService
- 还来不急看你嘴腼腆的笑容 任性的时间却不肯停止转动
- Java设计模式中的创建类模式
- Asp+jQuery+ajax实例
- Spring MVC 教程,快速入门,深入分析
- 【转载】Linux定时执行任务命令概述:at和crontab
- jQuery实现可编辑表格
- C++中四种类型转换