Java与C#的区别3

来源:互联网 发布:mac上能玩lol吗 编辑:程序博客网 时间:2024/06/13 20:15

 

从历史角度来说,java的思想,非常的具有开创性。因为是java第一次提出来了“一次编译,处处运行”并且真正的付诸于行动。为此,sun公司付出了巨大的代价--与各大IT公司签订协议,免费开放java,只需要一点,其必须遵守sun公司的标准。当初,微软也签订了这份协议。微软是一家非常具有危机感的公司,他从java的身上,看到了危机,所以,才会有vj++的尝试以及与sun公司后来的官司。sun发现微软违背了当初签订的协议,为java做了许多扩充,这样的风险是,微软有可能借助其平台的优势,越过sun的java标准而成为实际业界的java开发标准。所以,sun提起了诉讼。微软并没有做过多的坚持,因为sun的背后,是一个联盟,java联盟,而且这个联盟,普遍对微软怀有敌意。因此,微软抛开java,另起炉灶,主推c#。所以,从一开始,java与C#,本身就是一对冤家和对手。

微软的技术实力,毋庸置疑,不管是多少所谓的技术专家嘲笑windows系统架构的是一年级级别还是其他,但是不能否认,widows操作系统,是迄今为止,在个人电脑上运行最为成功的一个操作系统甚至没有之一。借助操作系统优势与业界声誉,C#从一开始的模仿,到后边不停的发展扩充,变化速度越来越快,也开始越来越偏离Java。

java与C#的比较:

1、跨平台   java从一开始,就以开放的方式,邀请了足够多的力量,对其平台进行扩充支持,所以,虽然跨平台上,仍然存在一些小小的瑕疵--某些程序在更换系统后,还是要做很小的微调的,但是已经能够在大部分的平台上实现了该目的。所以java成功于--开放。开放成就了java,但是java的创始人sun并没有获得足够的利益,导致java的利益,主要流失到了IBM等java联盟内。C#属于微软一家独有,索然一开始,微软主推.Net平台时,曾经提过“一次编译,到处运行”但是后边也知道,该目的只能是镜花水月,所以,微软的主要精力,还是聚集在将Windows平台上的开发工具高度集成的目的之上即.Net平台。有一个开源项目,计划构建Linux上的.Net CLR,但是并没有多少人买账。如果将来有一天,C#和.Net也提供跨平台,那么,要么是微软有足够的力量,提供了多系统的.net支持,要么就是有超级牛人爱好者,免费作出,要么就是微软开放了.Net平台,其他厂商开始支持,当然,这点可能性最小,至少很长时间段内,可能性很低。

2、编译效率与特性  C#方面,由.Net2.0发展往上,一直到LinQ,WPF等,支持的表达式和关键字都有了很大的扩充,这也导致编译器编译负担越来越大,因此,编译速度越来越慢。而java,在此方面的发展则较少,这是存在客观原因的,毕竟每一次更改,都必须所有相关公司去支持而不仅仅是一家。但是开源社区以另外一种方式,在不断的扩充着java的发展,即框架。

3、运行效率  java和C#,在这一方面,我没有实际数据比较。仅从逻辑上分析。java和C#,都是运行在一层托管之上,java是jvm,c#是CLR,两者实际上都是解释执行。从常规逻辑来说,调用的层次越多,调用花费的时间越长,所以,java和C#的运行效率,都比直接运行在操作系统之上的软件,要低,具体低的程度,取决于这层解释器的加载中间代码的方式和执行效率。

4、 大型服务与网络  在这一方面上,C#是完全占劣势的。因为在服务器操作系统市场,微软的市场份额,很低。有兴趣的用户可以查找一下服务器市场上各种操作系统占据的市场比。服务方面,主要是java与C/C++争夺市场,或者更确切的说,是java在不断吞食C++的市场。在网络方面,则是java与C#展开了正面较量,嗯,从网站数量上来讲,C#占据劣势,但是这种劣势,更主要是由于微软在服务器市场上的劣势与树敌引起的。

5、PC应用领域  这一方面,C#比java的优势太大了。在个人桌面系统中,你可以找到C#写成的托管应用程序,但是你不一定能找到java写就的应用程序,而java的历史,也证明了,使用java写就桌面应用程序,是一种错误,也许有一天,当jvm能够发展采用新的技术或者当PC性能,能够以人能够接受的速度,运行java桌面程序的时候,java桌面程序,也许才会多起来。当然,这里边还存在一个问题在下边说。

6、底层执行与跨语言 C#支持直接不安全代码的执行。这个特性显得有点儿多余,既然需要支持不安全代码,那为什么不使用对指针等支持更好的C/C++语言呢?不过,如果是用来做与C/C++ dll等或者Windows下的系统调用,这一部分还是有用的。java也支持调用C/C++,但是,他不支持对底层的直接调用,这里的底层,是指如同C#使用不安全代码一样直接使用指针。相对而言,调用系统API,C#调用Windows更方面和快捷,方式也简单的多,毕竟是同一家的东西。但是,从设计目的来说,java本身是纯粹面向应用的语言,设计就与系统打交道较少,在这方面比,根本没有可比性。

7、未来的发展方向  VS和.Net越来越臃肿,是的,确实,越来越臃肿,但是其功能也越来越强大,写代码,也越来越简单。如果说,泛型是对java的抄袭,那么,LinQ和Lamada表达式则是C#对自身编译器的扩展,一直到后期的WPF。是的,微软是一家危机性很强的公司,当google开发出浏览器并放出风声,说开发以浏览器为中心的操作系统的时候,微软已经开发了以WPF为基础的文本解释型窗体程序。浏览器是什么?从本质上来讲,浏览器也是一层中间服务,其为html和前台脚本标签提供了解释执行,功能实际上与jvm和CLR类似,只不过,其解释的东西更泛化,而HTML标签,就是浏览器的中间语言。在VS2010中,VS不仅仅是增加了许多语言的特性,还增强了管理和开发Case方面的支持,实际上从VS.Net的发展方向来看,微软更看好的应用开发管理与控制,而不再是追求与java的亦步亦趋。java为了跨平台,其标准要求更严格,不可能像C#一样,对语法进行简单的扩充,所以,其发展方向,一直是外部框架或者说,是Case工具的扩充。如果将这一部分加起来,java的开发环境,也并不简洁。

不管是java还是C#或者是C/C++,一个个语言比较其实意义不大。因为要么他们处于的层次不一样比如比较c/c++和java,要么应用的方向和场景有差别比如比较java与C#的客户端程序.只有应用场景和所处的层次大致时,才能够比较.比如C#的web服务和java的web服务.

归根结底,各种语言的发展都是越来越智能化,提供的可用的支持都是越来越多。最终发展的目的,就是,程序员们,老老实实的当工人吧,按照用户的需求,采用他们的架构,将一块块砖石垒起来。如果你不想当砖瓦工,那就跳出语言的束缚吧,站起来,学学工程理念,而不是讨论哪种语言优劣.

有一个观念是,决定一件事物发展的,往往不在于该事物的本身,而在于其外部.计算机语言发展到高级语言这一步,已经无所谓优劣了,而已经演变成了各大IT厂商的角力场,哪一方面的语言支持的工具多,开发模式更多,哪一个厂商的实力更占优,哪一门语言,才更有发展力.而在这一方面,我们国内,根本没有任何可参与的地方,只能随着IBM,微软,Orocal,Google等各大IT公司的角斗而随波逐流,既然如此,那我们如此的卖力争吵,根本没有任何意义.

一点儿题外话:

说实话我挺佩服微软,因为,微软首先作为挑战者,以后来者身份从IBM等大公司中杀了出来,等他杀出来以后,他又开始面对Google等新型公司的挑战,同时由于其垄断地位,导致其他厂商谁看他都不怎么顺眼,所以,才会有越来越多批评微软的声音.

开源是一种伟大的创新,但是国内对开源有误解,认为开源就是免费,或者说,开源了拿着别人的成果改改改头换面,就以自己的名义发布.所以,国内有许多开源的伪拥泵者,因此,国内对开源的贡献一直有限,首先,就表现在,基本没有公司提出或者维护开源的项目,而开发者们,也整天是研究已发布的开源项目,是研究使用,而不是仔细学习研究开源的本质进而提出新的扩充.

看见几个问题,咱也凑几句:

1  c/c++ 能不能写web服务   c/c++ 其实是完全可以写web服务的.什么是web服务?web服务本质就是一个C/S结构的服务模型,浏览器充当C端,接收到服务器发的数据后,对html等标记语言进行解析展现,服务端监听某个端口,接收到请求后,进行一系列操作,然后将结果返回.

比如一个很简单的web服务,监听80端口后,不管任何请求,都可以给回某个字符串,完全支持http协议后,一个Web服务就完成了.当然这里边还有好多的机制比如Session等.

2  c#/java能不能写操作系统.   不能,至少现阶段不能,除非能够制出支持.Net  framework或者jvm的固件,否则如果使用软件已经能够支持.Net framework或者jvm,那就没必要再在上实现操作系统了,因为,此时的软件已经实现了进程,线程,内存,文件等操作系统的基本要素,没必要再骑马找马了.

3   我应该学习java还是C#?  其实这个本来不应该成为问题,但是初学者又都容易迷惑. 语言是工具,如果不是培训,而是学校里学习,我的建议是,学习C语言,不要以C++为主,然后学习其他的面向对象语言比如C#或者java,而学习这两门语言.而在学习语言的过程中,重点学习练习思维方式,一旦对语言熟悉以后,其他语言就简单得多了,看看语法,看看库,拿着sdk帮助,绝对就可以使用了.为什么不建议使用C++作为基础学习语言?因为C++更主要还是一种过渡语言,既包含面向对象又包括面向过程,导致都不纯粹,而且其设计极其复杂.另外,c++并没有一个完整统一的标准,虽然现在有一个标准,但是完全支持的编译器,太少. 这也是新的面向对象语言代替它的原因. 如果是培训的,那就没啥说的了,既然选择了培训的项目语言,那就说明看好那方面的发展,好好学习就是了. 不过记住,一种语言打天下的时代,早就没了,要不然也不会宣扬思维至上,实际上,宣扬的是一种学习方式,因为IT业的知识更新速度太快了,也因此,代码工人,是最累的一个工人群体.

4  设计对象的一个基本原则是:提供充足的方法和属性,但是不要提供任何调用.对象的调用,请调用类去控制实现.

5  看某一种语言,最主要从其产生背景,应用领域和操作方便性去看,去了解本质,而不是盲目根其他语言比较.

6  开发的越多,越觉得自己不知道的还很多,所以我一直诚惶诚恐.我也不是专家,仅仅是一个行业相关者.因此,有问题欢迎提,有看法欢迎发表,但是语言主义者就不要留言了,因为讨论这个话题很没意思.

 

原创粉丝点击