社区
Java SE
帖子详情
对象的clone方法实现复制对象与用构造函数和属性方法复制对象有区别吗?
dddlgbb
2007-01-31 10:50:19
如没有区别,还要clone方法干什么?
还有如何控制clone只复制部分属性值?
...全文
467
9
打赏
收藏
对象的clone方法实现复制对象与用构造函数和属性方法复制对象有区别吗?
如没有区别,还要clone方法干什么? 还有如何控制clone只复制部分属性值?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
MountainRiver
2007-02-01
打赏
举报
回复
clone方法是浅复制,浅一点的理解就是 一个对象的引用!
dddlgbb
2007-02-01
打赏
举报
回复
ding
dddlgbb
2007-02-01
打赏
举报
回复
那如何控制clone只复制部分属性值?还有用clone实现是不是效率要高些?
捏造的信仰
2007-02-01
打赏
举报
回复
有些属性你未必 get 得到。所以使用 clone() 方法更加合理一些。
For_suzhen
2007-02-01
打赏
举报
回复
protected Object clone()
throws CloneNotSupportedException创建并返回此对象的一个副本。“副本”的准确含义可能依赖于对象的类。一般来说,对于任何对象 x,如果表达式:
x.clone() != x是正确的,则表达式:
x.clone().getClass() == x.getClass()将为 true,但这些不是绝对条件。一般情况下是:
x.clone().equals(x)将为 true,但这不是绝对条件。
按照惯例,返回的对象应该通过调用 super.clone 获得。如果一个类及其所有的超类(Object 除外)都遵守此约定,则 x.clone().getClass() == x.getClass()。
按照惯例,此方法返回的对象应该独立于该对象(正被克隆的对象)。要获得此独立性,在 super.clone 返回对象之前,有必要对该对象的一个或多个字段进行修改。这通常意味着要复制包含正在被克隆对象的内部“深层结构”的所有可变对象,并使用对副本的引用替换对这些对象的引用。如果一个类只包含基本字段或对不变对象的引用,那么通常不需要修改 super.clone 返回的对象中的字段。
Object 类的 clone 方法执行特定的克隆操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。注意:所有的数组都被视为实现接口 Cloneable。否则,此方法会创建此对象的类的一个新实例,并像通过分配那样,严格使用此对象相应字段的内容初始化该对象的所有字段;这些字段的内容没有被自我克隆。所以,此方法执行的是该对象的“浅表复制”,而不“深层复制”操作。
Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。
bluesmile979
2007-02-01
打赏
举报
回复
好像没啥区别,不过至少你要是用到的地方都构造函数get set恐怕是相当大的工作量,而且private的冬冬类外面恐怕不是那么容易拿到的吧
重写。。。。。。。。。。。。。跟重写别的函数是一样的阿,在clone函数里面写上你要实现的功能
dddlgbb
2007-02-01
打赏
举报
回复
to YidingHe(机枪兵) :
clone() 方法肯定要重写,但关键是如何重写?
qujiawei
2007-02-01
打赏
举报
回复
我是初学者 有点迷糊 但我ding
捏造的信仰
2007-02-01
打赏
举报
回复
>>那如何控制clone只复制部分属性值?
重写 clone() 方法。
java
对象
复制
[参考].pdf
java
对象
复制
[参考].pdf
详解Java中的
clone
方法
?原型模式
Java中
对象
的创建
clone
顾名思义是
复制
, 在Java语言中,
clone
方法
被
对象
调用,所以会
复制
对象
。所谓的
复制
对象
,首先要分配一个和源
对象
同样大小的空间,在这个空间中创建一个新的
对象
。那么在java语言中,有几种方式可以创建
对象
呢? 1 使用new操作符创建一个
对象
2 使用
clone
方法
复制
一个
对象
那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到new操作符时, 首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用
构造函数
,填充
对象
的各个域,这一步叫做
对象
的初始化,构造
方法
返回后
php中拷贝
构造函数
、赋值运算符重载
php中拷贝
构造函数
、赋值运算符重载
方法
, 需要的朋友可以参考下
java 中
clone
()的使用
方法
主要介绍了java 中
clone
()的使用
方法
的相关资料,希望通过本文能帮助大家能掌握
clone
()的克隆
方法
,需要的朋友可以参考下
解析设计模式中的Prototype原型模式及在C++中的使用
主要介绍了设计模式中的Prototype原型模式及在C++中的使用,需要的朋友可以参考下
Java SE
62,628
社区成员
307,259
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章