java clone学习总结[Java编程]
本文“java clone学习总结[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
由于Java中的全部东西都是句柄,并且由于每个对象都是在内存堆中成立的——只有不再需求的时刻,才会当作垃圾汇集掉,所以对象的操作方法发生了改变,分外是在传送和返回对象的时刻.举个例子来说,在C和C++中,假如想在一个办法里初始化一些存储空间,大概需求恳求用户将那片存储区域的地址传送进入办法.不然就必须考虑由谁负责排除那片区域.因此,这些办法的接口和对它们的理解就显得要复杂一些.但在Java中,根本没必要关心由谁负责排除,也没必要关心在需求一个对象的时刻它能否仍旧存在.因为系统会为我们照料一切.我们的程序可在需求的时刻成立一个对象.并且更进一步地,根本没必要耽忧那个对象的传输机制的细节:只需简单地传送句柄便可.有些时刻,这种简化非常有代价,但另一些时刻却显得有些多余.
可从两个方面熟习这一机制的缺陷:
(1) 必定要为额外的内存管理付出效率上的丧失(固然丧失不大),并且关于运行所需的时间,老是存在一丝不肯定的因素(因为在内存不够时,垃圾汇集器大概会被强迫采纳行动).对大大都利用来说,长处显得比缺陷重要,并且部份对时间要求非常尖刻的段落可以用native办法写成(拜见附录A).
(2) 别名处理:有时会不慎得到指向同一个对象的两个句柄.只有在这两个句柄都假定指向一个“明确”的对象时,才有大概产生问题.对这个问题,必须加以充足的器重.并且应当尽大概地“克隆”一个对象,以避免另一个句柄被不但愿的窜改影响.除此以外,可考虑成立“不可变”对象,使它的操作能返回同种范例或差别种范例的一个新对象,从而提高程序的履行效率.但千万不要改变原始对象,使对那个对象别名的其他任何方面都感受不出改变.
有些人认为Java的克隆是一个拙笨的家伙,所以他们实现了自己的克隆筹划(注释⑤),永久根绝调用Object.clone()办法,从而消除了实现Cloneable和捕捉CloneNotSupportException违例的需求.这一做法是公道的,并且由于clone()在Java尺度库中很少得以支持,所以这明显也是一种“安全”的办法.只要不调用Object.clone(),就没必要实现Cloneable大概捕捉违例,所以那看起来也是可以承受的.
⑤:Doug Lea分外器重这个问题,并把这个办法举荐给了我,他说只需为每个类都成立一个名为duplicate()的函数便可.
Java中一个风趣的关键字是byvalue(按值),它属于那些“保存但未实现”的关键字之一.在理解了别名和克隆问题今后,大家可以想象byvalue终究有一天会在Java顶用于实现一种自动化的本地副本.这样做可以办理更多复杂的克隆问题,并使这种情形下的编写的代码变得越发简单和结实.
以上是“java clone学习总结[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |