黑马程序员技术交流社区

标题: java与C#有哪些差别啊都? [打印本页]

作者: 庞子华    时间: 2012-3-24 12:18
标题: java与C#有哪些差别啊都?
在学校学的都是C系列的语言,C,C++,和java有明显区别,万一去面试时说都学过人家问区别该怎么答啊????
但是突然一想C#和java都有哪些区别还真没细想过我就感觉
1.C#只能在windows操作系统下,java可以跨平台
2.java是开源的,免费的,使用成本低,vs却是要花钱的而且几万一个
其他的细节的却一直没总结过,学java过程中一直感觉除了写代码是稍微有点区别外,一点别的也感觉不出来,
欢迎大家来总结一下,万一哪天面试碰见了也好回答。
作者: 李成    时间: 2012-3-24 14:24
C语言是存面向过程的语言,它具有高级语言的特点,又具有汇编语言的的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。C能做几乎所有的开发但是它毕竟是各面向过程的语言其开发成分过高开发周期太长了。
C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。说白了C++有面向对象开发语言的特点,但是C++是半面向过程半面向对象的语言。
我在学C和C++的时候感觉这两个语言最强的地方就是指针,指针算是C语言的灵魂,这么多年来C语言一直能存在并且程序员还在用的理由我感觉就在指针上。C++就不用说了。
JAVA我也不多说了地球人都知道!~特别是这个论坛里的大神们{:soso_e113:}
C#以下是官方解释:C#(C Sharp)是微软(Microsoft)为。NET Framework量身订做的程序语言,C#拥有C/C++的强大功能以及Visual Basic简易使用的特性,是第一个组件导向(Component-oriented)的程序语言,和C++与Java一样亦为对象导向(object-oriented)程序语言。
对于我这个JAVA控来说C#她娘的就是微软偷JAVA技术来对抗JAVA的盗版技术,说的很好听可夸平台夸你妹!什么自主开发开你妹!~自主开发还被当年SUN公司被盗用他人技术的理由罚了不知道多少亿美元。如果说object-c适合于苹果系统的开发上,那么C#就是给微软系统量身打造的语言,把程序员牢牢绑在自己的平台上缺德。
作者: 盛祖华    时间: 2012-3-24 14:48
相似性:
Java和C#都是一门面向对象的语言,Java更多地借鉴了C++的优点,而摒弃了它的一些不太容易被人掌握的知识点(有些不能说是缺点),并且增加了一些自己的特点,而C#则是更多地借鉴了Java的优点,而增加了一些自己的特点。
个人猜测,在Java语言出现之前,C++被广泛使用,而且被认为容易使用,Java如此类似于C++,致使人们更容易接受;而现在Java是最广泛使用的,C#如此接近Java,则更容易吸引Java开发人员(仅仅是猜测)。也就是说Java站在C++的肩膀上,而C#站在了Java的肩膀上。

跨平台特性
跨平台特性的最大优点就是只要有相应的运行环境,同一个编译好的程序就能在上面运行,而不需要重新编译程序,它的缺点就是不能针对特定平台,所以不能充分利用平台特性,因而在性能上会有所降低,幸运的是现在的硬件比以前大大提高,这部分的降低在绝大部分情况下可以不用考虑。而且Java和C#都有自动垃圾回收机制,运行时环境可以自动清理不再使用的内存,减少了手动释放内存的风险。
Java的跨平台特性建立在可以跨越多个不同种类的操作系统平台,比如Windows、Linux、Unix等,但是需要注意的是不是说Java能在所有的系统上都能跨平台,必须实现在该操作系统上的Java运行时环境JRE才行,也就是说假如今天有人开发了一个前所未有的系统,这时候Java程序是不能在上面运行的——因为还没有针对这个操作系统的Java虚拟机(JVM),好在在当今绝大部分操作系统上都有针对该系统的JVM,所以它能“一次编译,到处运行”。
C#的跨平台则是建立跨Windows平台的基础上的(有一个针对非Windows的.net运行环境,不过好像还不是太好),不像以前Windows95下的程序到WindowsXP下就不能运行,或者WindowsXP下的程序到Windows95下也不能运行(这种情况居多),现在呢,只要安装一个.net framework(也就是.net程序的运行时环境),在Windows2003下编写的.net程序不用重新编译就能在Windows98下运行,只要这台安装Windows98的机子安装了.net程序的运行时环境。
这一个回合Java胜出。

语法特性
Java抛弃了指针,使用了包(package)的概念,导入包使用import语句,在Java中有几种非面向对象的数据类型,那就是byte、char、short、int、long、float、double这几种数据类型,在方法中传递时仅仅是传递它们的值,为了方便一些集合类的操作(它们存储的是对象类型),又增加了它们的包装类Byte、Char、Short、Integer、Long、Float、Double。
在Java中存在属性的概念,这些都是通过setXXX()、getXXX()来设置。

C#没有完全抛弃指针(在unsafe状态下还可以操作指针),对于类的管理采用了名称空间(namespace)的概念,并且还使用了out、ref等关键字,便于从一个方法返回多个结果,在C#中不仅存在属性,还有索引器等比较方便的特性。

生成文档doc文档
在利用程序中的特殊注释生成api文档方面,两种语言都有不错的表现,不过C#更胜一筹,它能利用注释在输入类成员时提示,便于程序员不用去看程序源码而知道程序的大概用途,而Java这方面没有。

IDE(集成开发环境)方面
Java的IDE是非常多,从庞大的Jbuilder到小巧的Jcreator,还有可以扩充的Eclipse,可以说Java的IDE的数量是非常多的。

C#的IDE不多,除了微软自己的VS.NET之外,好像还有Borland的C#Builder,除此之外,广为认知好像不多。

性能方面
Java采用了字节码(bytecode),而C#则采用了MSIL,它们的性能都是介于解释型语言和生成本地机器代码之间的,在本人的测试中,C#的性能略高于Java,可能Java的字节码要适用多个系统多个平台的缘故吧。

企业开发方面
由于Java出现的时间长的缘故,并且还能跨平台,采用EJB等解决方案,所以目前绝大部分网站都是基于J2EE开发的(大部分都是J2EE+MySQL+Apache+Linux,都是免费的)。

C#做的大型网站,它也有针对EJB的Net Remoting技术,由于它限制了必须(IIS+Windows),所以大型的网站不是太多,不过随着时间的推移,可能会有更多的网站采用asp.net技术。毕竟微软的东西一向傻瓜化,门槛低,能够吸引一些初级编程人员到这个行列中来。而且微软的asp.net采用了代码和页面分离技术,的确能方便编程人员。

总结:
记得有一句话,大意是这样的,Linux就像专业相机,拍摄出来的照片取决于你的摄影技术;而Windows就像傻瓜相机,只要会按快门就能拍照。我觉得Java就像Linux,添加一个按钮,一个标签都需要你指定样式,放置到哪里也需要你指定;而C#则继续秉承了Windows的特点,傻瓜化,便于操作,便于上手。

作者: 庞子华    时间: 2012-3-24 14:51
盛祖华 发表于 2012-3-24 14:48
相似性:
Java和C#都是一门面向对象的语言,Java更多地借鉴了C++的优点,而摒弃了它的一些不太容易被人掌握 ...

很好很强大!如果再面试碰见这个问题如此回答最好不过了
作者: 庞子华    时间: 2012-3-24 15:03
李成 发表于 2012-3-24 14:24
C语言是存面向过程的语言,它具有高级语言的特点,又具有汇编语言的的特点。它可以作为工作系统设计语言, ...

微软人家跟腾讯一样:别的没有,就是有用户!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2