package com.wonders.week01.object;
/**
* JDK1.7
* clone
* (1)java.lang.Object
* (2)方法的访问权限修饰符是protected
* (3)方法的返回值类型是Object
* (4)返回值是当前实例的一个克隆
* (5)如果对象所属的类不支持Cloneable 接口,子类重写clone方法也会抛出异常CloneNotSupportedException,指出实例不可以被克隆。
* (6)创建并返回一个当前对象的复制。"复制"的准确含义是取决于当前对象所在的类。一般来说,对于任何的对象x,都有表达式
* (a)x.clone()!=x会返回true,
* (b)x.clone().getClass()==x.getClass();也会返回true。
* (c)x.clone.equals(x)也会返回true;
* 其中对于上面的(b)(c)中如果x.clone() == null的时候继续进行getClass()或者equals操作会抛出空指针异常。
* (7)按照惯例,通过调用super.clone可以获取到返回的对象。如果一个类及其子类都遵循这个惯例(除了Object这个类), 例子如右:x.clone().getClass() == x.getClass()
* (8)通常,该方法返回的对象应该独立于此对象(被克隆的对象)。为了达到这种独立,再返回它之前通过调用super.clone来修改一个或者多个该对象的域是很有必要的。
* 有代表性的,这意味着要复制包含被克隆的对象的内部“深层结构”的任何可变对象,并将对这些对象的引用替换为对副本的引用。如果一个类只包含private的成员变量或者一些不可变的对象,
* 通常情况下,通过super.clone返回的对象此时是没有成员变量的,需要被修改。
* (9)克隆用于类对象的方法执行特定的克隆操作.
* (10)如果当前对象所在的类没有实现Cloneable接口,就会抛出异常 CloneNotSupportedException。
* (11)所有的数组都被认为是实现了Cloneable 接口,clone方法的返回值类型是一个数组类型T[],其中T可以是引用类型也可以是基本数据类型。
* 否则,这个对象所在类的就会创建一个新的实例,并且初始化所有字段,其中包含该对象相应字段的内容。其中字段的内容不是自己克隆的,因此这个方法是该对象的浅克隆方法,而不是深克隆操作。
* (12)Object这个类自身是没有实现Cloneable接口的,因此,将克隆方法调用对象上的对象,将导致在运行时抛出异常.
* @author liyongyong
*
*/
public class CloneTest {
}
API学习java.lang.clone
最新推荐文章于 2024-04-27 22:31:59 发布