java浅克隆与深克隆

简介:

概念:俗话就是拷贝一个副本

一般实现:

实现Cloneable 接口重写clone()方法

部分代码


public Object clone() { 
    Object o = null; 
    try { 
        o = (Student) super.clone();// Object中的clone()识别出你要复制的是哪一 
        // 个对象。 
    } catch (CloneNotSupportedException e) { 
        System.out.println(e.toString()); 
    } 
    return o; 
}

 

注意:浅复制不能同时复制引用

 

如果需要复制引用将需要引用的对象也克隆一下做深复制

更好的方法是利用序列化(常说的串行化)来实现深复制(不需要实现Cloneable接口,需要实现Serializable接口)

见部分代码

 

public Object deepClone() throws IOException, OptionalDataException, 
ClassNotFoundException { 
    // 将对象写到流里 
    ByteArrayOutputStream bo = new ByteArrayOutputStream(); 
    ObjectOutputStream oo = new ObjectOutputStream(bo); 
    oo.writeObject(this); 
    // 从流里读出来 
    ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray()); 
    ObjectInputStream oi = new ObjectInputStream(bi); 
    return (oi.readObject()); 
}




本文转自 www19 51CTO博客,原文链接:http://blog.51cto.com/doujh/1932919,如需转载请自行联系原作者
相关文章
|
Java API
Java中常用API总结(5)—— Object类中的深克隆和浅克隆
不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来;基本数据类型拷贝过来的是具体的数据,引用数据类型拷贝过来的是地址值。在Object类中默认的克隆方式就是浅克隆
171 0
Java中常用API总结(5)—— Object类中的深克隆和浅克隆
|
Java 编译器
Java对象的深克隆与浅克隆(对象复制)(下)
Java对象的深克隆与浅克隆(对象复制)(下)
136 0
Java对象的深克隆与浅克隆(对象复制)(下)
|
Java API
Java对象的深克隆与浅克隆(对象复制)(上)
Java对象的深克隆与浅克隆(对象复制)(上)
107 0
Java对象的深克隆与浅克隆(对象复制)(上)
|
设计模式 Java uml
java设计模式之原型模式-浅克隆与深克隆
定义:原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 ​ 在应用程序中,有些对象比较复杂,其创建过程过于复杂,而且我们又需要频繁的利用该对象,如果这个时候我们按照常规思维new该对象,那么务必会造成资源浪费,这个时候我们就希望可以利用一个已有的对象来不断对他进行复制就好了,这就是编程中的“克隆”。
1068 0
|
Java 设计模式
Java 深克隆&浅克隆
Java 深克隆(DeepClone)与浅克隆(ShallowClone)是原型设计模式的灵魂。 记录结构: --什么是浅克隆? --实现浅克隆 --什么是深克隆? --实现深克隆 需求 Sunny 软件公司 OA 系统支持工作周报的快速克隆,极大提高了工作周报的编写效率,受到员工的一致好评。
885 0
|
1天前
|
Java
Java一分钟:线程协作:wait(), notify(), notifyAll()
【5月更文挑战第11天】本文介绍了Java多线程编程中的`wait()`, `notify()`, `notifyAll()`方法,它们用于线程间通信和同步。这些方法在`synchronized`代码块中使用,控制线程执行和资源访问。文章讨论了常见问题,如死锁、未捕获异常、同步使用错误及通知错误,并提供了生产者-消费者模型的示例代码,强调理解并正确使用这些方法对实现线程协作的重要性。
10 3
|
1天前
|
安全 算法 Java
Java一分钟:线程同步:synchronized关键字
【5月更文挑战第11天】Java中的`synchronized`关键字用于线程同步,防止竞态条件,确保数据一致性。本文介绍了其工作原理、常见问题及避免策略。同步方法和同步代码块是两种使用形式,需注意避免死锁、过度使用导致的性能影响以及理解锁的可重入性和升级降级机制。示例展示了同步方法和代码块的运用,以及如何避免死锁。正确使用`synchronized`是编写多线程安全代码的核心。
34 2
|
1天前
|
安全 Java 调度
Java一分钟:多线程编程初步:Thread类与Runnable接口
【5月更文挑战第11天】本文介绍了Java中创建线程的两种方式:继承Thread类和实现Runnable接口,并讨论了多线程编程中的常见问题,如资源浪费、线程安全、死锁和优先级问题,提出了解决策略。示例展示了线程通信的生产者-消费者模型,强调理解和掌握线程操作对编写高效并发程序的重要性。
32 3