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 的接口)中指定的这些方法才可远程使用.
本文深入探讨了Java语言中clone机制的原理与应用场景,解析了浅拷贝与深拷贝的区别,并介绍了实现Cloneable接口的重要性。
985

被折叠的 条评论
为什么被折叠?



