仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 834|回复: 18
打印 上一主题 下一主题

[学习教程] 了解下JAVA的java Object.clone()的效果

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:35:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱.
挪用Object.clone()时,实践产生的是甚么事变呢?当我们在本人的类里掩盖clone()时,甚么工具关于super.clone()来讲是最关头的呢?根类中的clone()办法卖力创建准确的存储容量,并经由过程“按位复制”将二进制位从原始对象中复制到新对象的存储空间。也就是说,它其实不只是预保存储空间和复制一个对象——实践必要查询拜访出欲复制之对象的正确巨细,然后复制谁人对象。因为一切这些事情都是在由根类界说之clone()办法的外部代码中举行的(根类其实不晓得要从本人这里承继进来甚么),以是人人也许已猜到,这个历程必要用RTTI判别欲克隆的对象的实践巨细。接纳这类体例,clone()办法即可创建起准确数目的存储空间,并对谁人范例举行准确的按位复制。
不论我们要做甚么,克隆历程的第一个部分一般都应当是挪用super.clone()。经由过程举行一次正确的复制,如许做可为后续的克隆历程创建起一个优秀的基本。随后,可接纳另外一些需要的操纵,以完成终极的克隆。
为切实懂得其他操纵是甚么,起首要准确了解Object.clone()为我们带来了甚么。出格地,它会主动克隆一切句柄指向的方针吗?上面这个例子可完成这类情势的检测:
  1. //:Snake.java
  2. //Testscloningtoseeifdestinationof
  3. //handlesarealsocloned.
  4. publicclassSnakeimplementsCloneable{
  5. privateSnakenext;
  6. privatecharc;
  7. //Valueofi==numberofsegments
  8. Snake(inti,charx){
  9. c=x;
  10. if(--i>0)
  11. next=newSnake(i,(char)(x+1));
  12. }
  13. voidincrement(){
  14. c++;
  15. if(next!=null)
  16. next.increment();
  17. }
  18. publicStringtoString(){
  19. Strings=":"+c;
  20. if(next!=null)
  21. s+=next.toString();
  22. returns;
  23. }
  24. publicObjectclone(){
  25. Objecto=null;
  26. try{
  27. o=super.clone();
  28. }catch(CloneNotSupportedExceptione){}
  29. returno;
  30. }
  31. publicstaticvoidmain(String[]args){
  32. Snakes=newSnake(5,a);
  33. System.out.println("s="+s);
  34. Snakes2=(Snake)s.clone();
  35. System.out.println("s2="+s2);
  36. s.increment();
  37. System.out.println(
  38. "afters.increment,s2="+s2);
  39. }
  40. }///:~
复制代码
一条Snake(蛇)由数段组成,每段的范例都是Snake。以是,这是一个一段段链接起来的列表。一切段都是以轮回体例创立的,每做好一段,城市使第一个构建器参数的值递加,直至终极为零。而为给每段付与一个举世无双的标志,第二个参数(一个Char)的值在每次轮回构建器挪用时城市递增。
increment()办法的感化是轮回递增每一个标志,使我们能看到产生的变更;而toString则轮回打印出每一个标志。输入以下:
  1. s=:a:b:c:d:e
  2. s2=:a:b:c:d:e
  3. afters.increment,s2=:a:c:d:e:f
复制代码
这意味着只要第一段才是由Object.clone()复制的,以是此时举行的是一种“浅层复制”。若但愿复制整条蛇——即举行“深层复制”——必需在被掩盖的clone()里接纳附加的操纵。
一般可在从一个能克隆的类里挪用super.clone(),以确保一切基本类举动(包含Object.clone())可以举行。跟着是为对象内每一个句柄都明白挪用一个clone();不然那些句柄会别号酿成原始对象的句柄。构建器的挪用也大抵不异——起首机关基本类,然后是下一个衍生的构建器……以此类推,直到位于最深层的衍生构建器。区分在于clone()并非个构建器,以是没有举措完成主动克隆。为了克隆,必需由本人明白举行。
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。
小魔女 该用户已被删除
沙发
发表于 2015-1-21 10:42:00 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
谁可相欹 该用户已被删除
板凳
发表于 2015-1-25 09:27:41 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
老尸 该用户已被删除
地板
发表于 2015-1-31 06:41:35 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
飘灵儿 该用户已被删除
5#
 楼主| 发表于 2015-2-2 18:44:06 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
柔情似水 该用户已被删除
6#
发表于 2015-2-4 14:51:44 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
海妖 该用户已被删除
7#
发表于 2015-2-9 17:45:52 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
山那边是海 该用户已被删除
8#
发表于 2015-3-9 05:08:41 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
活着的死人 该用户已被删除
9#
发表于 2015-3-20 21:17:35 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
若相依 该用户已被删除
10#
发表于 2015-3-24 00:15:58 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
飘飘悠悠 该用户已被删除
11#
发表于 2015-3-30 03:13:18 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
只想知道 该用户已被删除
12#
发表于 2015-3-31 14:45:59 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
再现理想 该用户已被删除
13#
发表于 2015-4-1 05:50:01 | 只看该作者
是一种使用者不需花费很多时间学习的语言
第二个灵魂 该用户已被删除
14#
发表于 2015-4-5 16:49:40 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
愤怒的大鸟 该用户已被删除
15#
发表于 2015-4-16 08:09:21 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
若天明 该用户已被删除
16#
发表于 2015-4-23 10:14:04 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
透明 该用户已被删除
17#
发表于 2015-5-1 14:02:23 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
不帅 该用户已被删除
18#
发表于 2015-5-2 09:08:53 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
莫相离 该用户已被删除
19#
发表于 2015-5-6 16:12:00 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-16 01:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表