发布一篇“刻舟求剑”的坏处(java)
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。从外表看,稳定类的创建仿佛是一个好计划。可是,一旦真的必要那种新范例的一个修正的对象,就必需辛劳地举行新对象的创立事情,同时另有大概触及更频仍的渣滓搜集。对有些类来讲,这个成绩并非很年夜。但对其他类来讲(好比String类),这一计划的价值显得太高了。
为办理这个成绩,我们能够创立一个“同道”类,并使其可以修正。今后只需触及大批的修正事情,便可换为利用能修正的同道类。完事今后,再切换回不成变的类。
因而,上例可改成上面这个模样:
//:Immutable2.java
//Acompanionclassformakingchanges
//toimmutableobjects.
classMutable{
privateintdata;
publicMutable(intinitVal){
data=initVal;
}
publicMutableadd(intx){
data+=x;
returnthis;
}
publicMutablemultiply(intx){
data*=x;
returnthis;
}
publicImmutable2makeImmutable2(){
returnnewImmutable2(data);
}
}
publicclassImmutable2{
privateintdata;
publicImmutable2(intinitVal){
data=initVal;
}
publicintread(){returndata;}
publicbooleannonzero(){returndata!=0;}
publicImmutable2add(intx){
returnnewImmutable2(data+x);
}
publicImmutable2multiply(intx){
returnnewImmutable2(data*x);
}
publicMutablemakeMutable(){
returnnewMutable(data);
}
publicstaticImmutable2modify1(Immutable2y){
Immutable2val=y.add(12);
val=val.multiply(3);
val=val.add(11);
val=val.multiply(2);
returnval;
}
//Thisproducesthesameresult:
publicstaticImmutable2modify2(Immutable2y){
Mutablem=y.makeMutable();
m.add(12).multiply(3).add(11).multiply(2);
returnm.makeImmutable2();
}
publicstaticvoidmain(String[]args){
Immutable2i2=newImmutable2(47);
Immutable2r1=modify1(i2);
Immutable2r2=modify2(i2);
System.out.println("i2="+i2.read());
System.out.println("r1="+r1.read());
System.out.println("r2="+r2.read());
}
}///:~和平常一样,Immutable2包括的办法保存了对象不成变的特性,只需触及修正,就创立新的对象。完成这些操纵的是add()和multiply()办法。同道类叫作Mutable,它也含有add()和multiply()办法。但这些办法可以修正Mutable对象,而不是新建一个。除此之外,Mutable的一个办法可用它的数据发生一个Immutable2对象,反之亦然。
两个静态办法modify1()和modify2()展现出取得一样了局的两种分歧办法。在modify1()中,一切事情都是在Immutable2类中完成的,我们可看到在历程中创立了四个新的Immutable2对象(并且每次从头分派了val,前一个对象就成为渣滓)。
在办法modify2()中,可看到它的第一个举动是猎取Immutable2y,然后从中天生一个Mutable(相似于后面对clone()的挪用,但这一次创立了一个分歧范例的对象)。随后,用Mutable对象举行大批修正操纵,同时用不着新建很多对象。最初,它切换回Immutable2。在这里,我们只创立了两个新对象(Mutable和Immutable2的了局),而不是四个。
这一办法出格合适鄙人述场所使用:
(1)必要不成变的对象,并且
(2)常常必要举行大批修正,大概
(3)创立新的稳定对象价值太高
前些天,在CSDN上看到了一个消息,说是net网页编程网页编程AJAX成功在Linux上运行,这一点对我触动很大,而且引发了我许多感叹,所以想写出来分享一下。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 Java 编程语言的风格十分接近C、C++语言。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 是一种使网页(Web Page)产生生动活泼画面的语言 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 是一种语言,用以产生「小应用程序(Applet(s)) 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 是一种为 Internet发展的计算机语言 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
页:
[1]