学习 java clone

本文深入探讨了Java语言中clone机制的原理与应用场景,解析了浅拷贝与深拷贝的区别,并介绍了实现Cloneable接口的重要性。

1. java 语言提供clone机制的原因: 

      由于Java不能 通过简单的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象。

2. clone应用场景

      GoF设计模式里有一个模式为原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 简单的说就是clone一个对象实例。使得clone出来的copy和原有的对象一模一样。 一般而言,我们要的clone应该是这样的。copy和原型的内容一样,但是又是彼此隔离的。即在clone之后,改变其中一个不影响另外一个

3. 浅拷贝 和 深拷贝

    对象的数据域包括:基本类型或对子对象的引用。 

    浅拷贝:并没有克隆包含在对象中的内部对象;

    深拷贝: 不仅克隆该对象,还要克隆在对象中的内部对象。

4. 与clone有关的java基础知识点 

      java的类型分为两大类,一类为primitive,如int,另一类为引用类型,如String,Object等等。 java的引用类型都是存储在堆(关键字new)上的。在Java语言中没有明确 的指针定义,实质上每一个new语句返回的都是一个指针的引用,只不过在大多时候Java中不用关心如何操作这个"指针"。如果它只有基本类型的属性和不可变类型的属性,或是是子对象生命周期内不会发生变化也不提供更改其方法的对象,那么只需浅clone就可以了。否则需要深clone

5. 参考资料:

http://www.java3z.com/cwbwebhome/article/article8/81145.html?id=2600

http://www.blogjava.net/jerry-zhaoj/archive/2009/10/14/298141.html


标记接口内容 copy 自 http://blog.youkuaiyun.com/su1216/article/details/7647841


标识接口 是没有任何方法和属性的接口. 它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情. 使用标记接口的唯一目的是使得可以用instanceof进行类型查询。 标记接口有: 

java.io.Serializable  未实现此接口的类将无法使其任何状态序列化或反序列化. 为保证 serialVersionUID 值跨不同 java 编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID 值. 

java.lang.Cloneable  表明Object.clone()方法可以合法地对该类实例进行按字段复制. 实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的). 如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常.

java.util.RandomAccess 用来表明其支持快速(通常是固定时间)随机访问.此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能.

java.rmi.Remote    Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口. 任何远程对象都必须直接或间接实现此接口. 只有在“远程接口”(扩展 java.rmi.Remote 的接口)中指定的这些方法才可远程使用.


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值