J2SE与c#的几点比较
最近在学习j2se,经过了大约有二十天,把马士兵老师的j2se看完了,感觉这个老师太幽默了,听他讲课不会走神,时间的利用率特别高。真心的给马士兵老师点个赞,然后再给让我们学习这个视频的米老师点两个!(世界上不乏美好的事物,缺乏的是发现美好事物的眼睛!)。
废话不多说了,看看在这个视频中,到底讲了那些内容。如下图所示:
可能学习过任何一种面向对象语言(我学的c#,c#就是仿照java,并对java进一步改良)的人,看到这个图的第一感觉,都是这些东西基本上不是都学习过吗,好像只有gui,jdbc是个新的东东。
其实真的是差不多的,反正大部分人认为他们是相同的。下边对他们进行一下比较!
在语法方面,两者都摈弃了c++中函数及其参数的const修饰,宏代换,全局变量和全局函数等许多华而不实的地方。
在继承方面,两者都采用了更易于理解和建构的单根继承和多接口实现的方案。在源代码组织方面,都提出了声明与实现于一体的更好的逻辑封装。
在基本类型和单根继承的对象之间的类型统一方面c#提出的box/unbox要比java的包装类显得高明,效率也要好。
面向组件无疑是当代软件开发的主流。c#对组件编程甚至到了"迷恋"的地步,这与6年前就出道的java不可同日而语--当然这是时代问题。c#通过属性,索引器,委派,事件,操作符重载,特征,版本等实现了其对组件编程的第一手的支持。虽然这些在java中都可以通过方法,接口或者适配器来间接地实现,但软件业的历史告诉我们这无论对编程效率或者逻辑设计都是一种极大的损伤--高级语言首先面对的是人,而不是机器。除去这些语言层面的组件支持机制,.net平台也为组件的配置,运行,管理等提供了一揽子解决方案,而为组件开发量身定做的visual studio.net更是令人兴奋,这都为c#的组件编程开辟了广阔的天地。在其他技术方面java的微弱劣势尚且可以忽略不计,但在组件编程方面java相较于c#却有着不可治愈的硬伤。尤其对于从c++和visual basic背景过来的开发人员,c#在这方面有着不可抵挡的魅力和诱惑。
在跨平台方面,java的支持和实现都是为人称道的,虽然jvm的速度仍然让人备感头疼。而c#虽然在底层构造方面对移植性进行了充分的考虑,但至少目前还没有成熟的,经过检验的产品。c#在跨平台方面似乎更热衷于xml web services互操作,而不是跨平台编程。但c#通过其基础语言构造(cli)对二十多种主流语言的对象级的互操作支持,又极大地提升了c#的技术地位。和com组件廉价地互操作也为c#挣到不少分数--保持一个兼容的体系对现代软件工业非常重要,也是对广大开发人员负责任的表现。
当然两个语言的全面的技术品评绝非仅仅上述几点简单的罗列比较,其后端平台(c# for .net, java for j2ee),及其编程框架的支持,各语言相关工具的实现,现有的系统基础等等都对程序设计语言的发展产生相当的影响。从纯技术角度来讲,c#无疑较java更具竞争力。争吵谁抄袭谁也没有意义--技术的发展本来就是一个相互借鉴的过程。纯技术较量也并不能决定这场论战的胜负--如果非要一决雌雄的话。软件界倒乐见竞争,经过市场锤炼的技术才能更好地为我们服务,让我们拭目以待!