首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java的clone()方法

Java的clone()方法   ⑴clone方法将对象复制了一份并返回给调用者。一般而言,clone()方法满足: ①对任何的对象x,都有x.clone() !...⑵Java中对象的克隆 ①为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。 ②在派生类中覆盖基类的clone()方法,并声明为public。...③在派生类的clone()方法中,调用super.clone()。 ④在派生类中实现Cloneable接口。...继承自java.lang.Object类的clone()方法是浅复制, 在编写程序时要注意这个细节。...覆盖Object中的clone方法, 实现深复制   现在为了要在clone对象时进行深复制, 那么就要Clonable接口,覆盖并实现clone方法,除了调用父类中的clone方法得到新的对象, 还要将该类中的引用变量也

39100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    php之clone 复制对象以及__clone魔术方法

    那么我们如果想要把这个值不守clone出来的对象的值影响该怎么办呢? 那么在这里我们只需要在此clone一下这个成员变量就好了,该如何clone了?...那么我们现在就可以使用我们的魔法方法__clone了。 首先我们来说说__clone()在什么状态下触发: 当我们有clone操作的时候将会除非这个类里面的__clone方法。...那么把我们的成员变量在__clone方法里面clone一下就好了,如下代码演示: 注:clone只能用于对象克隆,对象复制。记住,如果你clone一个非对象变量将会报错no obj。。。...以下例子是我从网上找的一个例子,感觉不错,这里将用这个例子来讲解魔法方法__clone的使用: 本来这个是没有注释的,我顺便把解释丢到了里面,这样强制clone后就不会指向原来的对象了。 <?...的使用方法了=。

    89510

    Java基础——clone()方法浅析

    一、clone的概念    clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。...而clone在第一步是和new相似的, 都是分配内存,调用clone方法时,分配的内存和源对象(即调用clone方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone...注意:如果一个类没有复写clone()方法,则clone()方法默认的是返回一个Object对象,我们可以强制转化为我们需要的类。...的用法   Java编程中经常会用到clone()方法clone()方法是Object类的一个protected的方法,由于非静态所以不能直接调用,但是可以被子类调用。...()方法,并将其声明为public(深拷贝) 三、浅析clone()方法与浅拷贝、深拷贝概念   在上面一节中我们发现正确使用clone()方法的两种方法的结果并不相同,直接实现Cloneable接口只是实现了浅拷贝

    59790

    JDK 之 如何实现clone方法

    JDK 之 如何实现clone方法 clone方法实现 测试类:Human、Student、Teacher、Matser clone实现方式: Human类通过实现Clonable接口中clone方法...在clone方法中通过super.clone()调用父类Object的clone方法 对于需要修正的域进行修正,进行深度clone. /* * @ProjectName: 编程学习 * @Copyright...或是通过公开方法来开放内部的私有方法的使用,这种看似鸡肋的代码设计,也可以达到相同的目的。 接口中只有一个clone方法,主要为公开和重载clone方法而设计。...的重写 重写clone()方法不一定需要应用Cloneable接口,因为只有执行Object.clone()方法才会做这个检查。...实现方式需要继承Cloneable接口 重写clone方法主要为了内部对象型成员域的深度clone和调整clone方法的可见域,确保在其他类中不会因为clone方法被protect修饰而无法使用。

    46820

    关于Cloneable接口和clone方法「建议收藏」

    1.1 Java Object根类默认提供了clone方法: protected native Object clone() throws CloneNotSupportedException; 一个本地方法...方法时,构造方法并没有被调用,所以我说创建一个对象new和clone是两条路 public static void main(String[] args) throws CloneNotSupportedException...} 打印: CloneModel{name=’null’, age=0} 2、重写clone方法原则 x.clone !...但建议这么做) 3、浅克隆和深克隆 3.1 默认clone方法时浅克隆 Object默认的clone方法实际是对域的简单拷贝,对于简单数据类型,是值的拷贝; 对于复杂类型的字段,则是指针地址的拷贝,clone...后的对象和原对象指向的还是一个地址空间 所以说默认的clone方法时浅克隆。

    26110

    PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析

    本文实例讲述了PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法。...为了解决复制问题,PHP提供了一种克隆clone(关键字,不是方法)对象的显式方法。...如果需要对克隆后的副本对象在克隆时重新为成员属性赋初值,则可以在类中声明一个魔术方法“__clone()”。该方法是在对象克隆时自动调用的,所以就可以通过此方法对克隆后的副本重新初始化。...__clone()方法不需要任何参数。将上例中的代码改写一下,在类中添加魔术方法__clone(),为副本对象中的成员属性重新初始化。 <?...,并且,此时还会自动调用该类的魔术方法:__clone()(只要该类中有该方法)。

    38710

    详解Java中的clone方法 -- 原型模式

    clone在第一步是和new相似的, 都是分配内存,调用clone方法时,分配的内存和源对象(即调用clone方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone...覆盖Object中的clone方法, 实现深拷贝   现在为了要在clone对象时进行深拷贝, 那么就要Clonable接口,覆盖并实现clone方法,除了调用父类中的clone方法得到新的对象, 还要将该类中的引用变量也...的clone方法中,将源对象引用的Head对象也clone一份。      ...真的是深拷贝吗   由上一节的内容可以得出如下结论:如果想要深拷贝一个对象, 这个对象必须要实现Cloneable接口,实现clone方法,并且在clone方法内部,把该对象引用的其他对象也要clone...这需要让Face类也实现Cloneable接口,实现clone方法,并且在在Head对象的clone方法中,拷贝它所引用的Face对象。

    38900

    详解Java中的clone方法:原型模式

    clone在第一步是和new 相似的, 都是分配内存,调用clone方法时,分配的内存和源对象(即调用clone方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone...覆盖Object中的clone方法, 实现深拷贝 现在为了要在clone对象时进行深拷贝, 那么就要Clonable接口,覆盖并实现clone方法,除了调用父类中的clone方法得到新的对象, 还要将该类中的引用变量也...方法中,将源对象引用的Head对象也clone一份。...真的是深拷贝吗 由上一节的内容可以得出如下结论:如果想要深拷贝一个对象, 这个对象必须要实现Cloneable接口,实现clone方法,并且在clone方法内部,把该对象引用的其他对象也要clone一份...这需要让 Face类也实现Cloneable接口,实现clone方法,并且在在Head对象的clone方法中,拷贝它所引用的Face对象。

    73310

    深入浅出| java中的clone方法

    我们还年轻,但这不是你浪费青春的理由 克隆和复制 clone,有人称之为克隆,有人称之为复制,其实都是同一个东西 本文称之为"克隆",毕竟人家方法名叫"clone" 为什要用克隆 想一想,为什么需要克隆...clone() throws CloneNotSupportedException; 仔细看,它是个native方法,native方法是由非java语言实现的(因为java本身无法直接对操作底层进行访问和操作...,但它不是强制性的 因为每个类的基类都是Object,所以都有clone方法,但是它是protected,所以不能在类外访问 克隆一个对象,需要对clone重写 如何实现克隆 在说实现前,得区分下浅克隆和深克隆...深克隆 有两种实现方法 多层实现Cloneable类 利用序列化和反序列化 1.多层实现Cloneable类 让上述的Bag类也实现Cloneable类,并重写clone方法 public class...} 这样便可实现深克隆,但这种方法很麻烦,若Bag类中还含有成员引用,则又需要再让它实现Cloneable接口重写clone方法,这样代码会显得很臃肿,且繁琐。

    95420

    Effective.Java 读书笔记(11)关于clone方法

    11.Override clone judiciously 大意为 明智地重写clone方法 说到clone方法,我们来提一提Cloneable这个接口,这个接口是用来作为一种标记某对象允许被clone...的一种混合接口,可是不幸运的是,这个接口并没能起到该有的作用,它首要的缺陷就是缺少一个clone方法,并且Object的clone方法又是一个protected的方法。...如果clone方法返回一个通过构造方法创建出来的对象,通常会返回不一样的类,故如果你重写的是那些非final定义的类的clone方法的时候,你就应该在方法中返回通过调用super.clone获得的对象,...super.clone,然后在对每一个域运用更加高级的方法来重新刷新这些域,这样的方法十分优雅,但是优雅的方法通常速度不会很理想 和构造方法一样,一个clone方法不应该在clone的构造上调用任何非final...方法,如果clone方法调用一个重写了的方法,这个方法将会在子类定义它之前执行,也就是说,这个方法很有可能会产生clone的实例与原始实例的冲突,因此,我们之前所谈论的put(key,value)方法应该要么是

    44820
    领券