仓酷云
标题:
来看使类具有克隆才能
[打印本页]
作者:
海妖
时间:
2015-1-18 11:35
标题:
来看使类具有克隆才能
诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net网页编程里有这些工具吗?要简单多少?。
只管克隆办法是在一切类最基础的Object中界说的,但克隆仍旧不会在每一个类里主动举行。这仿佛有些难以想象,由于基本类办法在衍生类里是一定能用的。但Java的确有点儿反其道而行之;假如想在一个类里利用克隆办法,独一的举措就是专门增加一些代码,以便包管克隆的一般举行。
1.利用protected时的技能
为制止我们创立的每一个类都默许具有克隆才能,clone()办法在基本类Object里失掉了“保存”(设为protected)。如许酿成的成果就是:对那些复杂地利用一下这个类的客户程序员来讲,他们不会默许地具有这个办法;其次,我们不克不及使用指向基本类的一个句柄来挪用clone()(只管那样做在某些情形下出格有效,好比用多形性的体例克隆一系列对象)。在编译期的时分,这实践是关照我们对象不成克隆的一种体例——并且最奇异的是,Java库中的年夜多半类都不克不及克隆。因而,假设我们实行下述代码:
Integerx=newInteger(l);
x=x.clone();
那末在编译期,就有一条厌恶的毛病动静弹出,告知我们不成会见clone()——由于Integer并没有掩盖它,并且它对protected版原本说是默许的)。
可是,倘使我们是在一个从Object衍生出来的类中(一切类都是从Object衍生的),就有权挪用Object.clone(),由于它是“protected”,并且我们在一个承继器中。基本类clone()供应了一个有效的功效——它举行的是对衍生类对象的真正“按位”复制,以是相称于尺度的克隆举动。但是,我们随后必要将本人的克隆操纵设为public,不然没法会见。总之,克隆时要注重的两个关头成绩是:几近一定要挪用super.clone(),和注重将克隆设为public。
偶然还想在更深层的衍生类中掩盖clone(),不然就间接利用我们的clone()(如今已成为public),而那其实不必定是我们所但愿的(但是,因为Object.clone()已制造了实践对象的一个正本,以是也有大概同意这类情形)。protected的技能在这里只能用一次:初次从一个不具有克隆才能的类承继,并且想使一个类酿成“可以克隆”。而在从我们的类承继的任何场所,clone()办法都是可使用的,由于Java不成能在衍生以后反而减少办法的会见局限。换言之,一旦对象变得能够克隆,从它衍生的任何工具都是可以克隆的,除非利用特别的机制(前面会商)令其“封闭”克隆才能。
2.完成Cloneable接口
为使一个对象的克隆才能功成美满,还必要做另外一件事变:完成Cloneable接口。这个接口令人稍觉奇异,由于它是空的!
interfaceCloneable{}
之以是要完成这个空接口,明显不是由于我们筹办上溯外型成一个Cloneable,和挪用它的某个办法。有些人以为在这里利用接口属于一种“棍骗”举动,由于它利用的特征打的是其余主张,而非本来的意义。Cloneableinterface的完成饰演了一个标志的脚色,封装到类的范例中。
两方面的缘故原由促进了Cloneableinterface的存在。起首,大概有一个上溯外型句柄指向一个基本范例,并且不晓得它是不是真的能克隆谁人对象。在这类情形下,可用instanceof关头字(第11章有先容)查询拜访句柄是不是的确统一个能克隆的对象毗连:
if(myHandleinstanceofCloneable)//...
第二个缘故原由是思索到我们大概不肯一切对象范例都能克隆。以是Object.clone()会考证一个类是不是真的是完成了Cloneable接口。若谜底是不是定的,则“掷”出一个CloneNotSupportedException背例。以是在一样平常情形下,我们必需将“implementCloneable”作为对克隆才能供应撑持的一部分。
首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。
作者:
山那边是海
时间:
2015-1-21 10:42
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
作者:
再现理想
时间:
2015-1-28 05:40
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者:
第二个灵魂
时间:
2015-1-31 06:41
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者:
愤怒的大鸟
时间:
2015-2-4 14:51
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者:
仓酷云
时间:
2015-2-6 13:40
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者:
活着的死人
时间:
2015-2-16 07:23
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者:
透明
时间:
2015-2-26 14:44
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者:
飘飘悠悠
时间:
2015-2-27 13:12
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者:
不帅
时间:
2015-3-3 12:26
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者:
蒙在股里
时间:
2015-3-11 10:54
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者:
飘灵儿
时间:
2015-3-18 06:51
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者:
灵魂腐蚀
时间:
2015-3-18 14:26
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
作者:
简单生活
时间:
2015-3-25 22:51
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
作者:
爱飞
时间:
2015-3-30 03:13
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者:
若天明
时间:
2015-4-3 03:08
是一种突破用户端机器环境和CPU
作者:
深爱那片海
时间:
2015-4-5 16:49
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
作者:
admin
时间:
2015-4-13 20:16
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者:
小女巫
时间:
2015-4-16 08:09
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2