您的位置:首页 > 编程语言 > C语言/C++

C/C++、JAVA、C#之间的关系和区别?

2017-09-06 17:26 323 查看
  虽然它们不是一种语言,不过它们却也有所联系。广泛地说,C可以看作其他三种语言的源语言,因为其他三种语言几乎都是从C而来的,无论从数据类型还是控制语句看,其他三种语言都有从C得来的迹象。

其中C++则一般看作是对C语言的扩展。

  因为C语言没有面向对象的语法结构,而当时业界又迫切需要面向对象的编程特性,所以贝尔实验室的开发者就为C添加了面向对象的结构。现在C++已经不只是C的扩展了,它已经完全可以被看作一种新的编程语言。虽然C的特性以及库函数仍然被C++支持,不过C++拥有自己的独立的类库体系,功能相当强大。

Java语言是一种完全的面向对象语言,虽然它的底层(运行时库)是用C语言开发的,可是并不依赖于C。

  因为Java的运行是在运行时库的支持下进行的,所以运行效率比起可以更接近底层的C/C++来说效率会有所影响,不过Java的类库采用很好的设计理念设计,非常好用,也非常实用,已经成为业界的一种标准开发语言。它的跨平台的特性尤其让很多开 发者欢迎,你只需要开发一次就能在所有安装了Java运行时库的系统上运行。Java发展了十几年了,可以应用领域非常之广泛,Web开发有 JSP,J2EE,桌面领域现在有JavaFX。

C#是微软开发的一种编程语言,语法类似Java,几乎就是从Java的翻版。

运行原理和Java也类似,也是通过运行时库的支持运行。不过支持的平台还很有限。Java几乎被所有平台支持,而C#目前只被Windows和Linux支持,Windows下的支持当然是由微软自己开发的,而Linux下的支持则有MONO支持。实际上,MONO也是把C#应用转化为Java应用而已,所以本质上,C#仍然只是被微软自己的操作系统支持。应用平台受到限制,是它最大的缺点。

Java是c++的简化

  (1)C++中子类对父类的继承有三种不同的形式,默认的是私有继承,也就是说父类的所有内容,除了私有的之外,都变成子类的私有成员。保护继承是说,子类的公开的和保护的成员,在子类中变成了保护的,而公有继承是,父类的共有成员,在子类中还是公有的,而保护的,在子类中保持保护。这是c++中的情景。继承的一个好处就是代码的复用,是在c++中,因为继承默认的是私有继承,那么我们就不能在子类中使用父类的代码,这就限制了面向对象的特性。在Java中对此作了改进。Java中不在对继承进行控制,但是使用c++中的公共继承效果,这样我们就可以省掉在继承时对关键字public的添加,方便了编程。也方便了对代码的重用。
  (2)C++使用纯虚函数的概念来进行抽象类声明。而在Java中,也有相应的语法,但是这里使用virtual关键值,因为是抽象的类,所以,在Java中,使用的关键字abstract(抽象)。只要在类的生命有,只有方法头而没有方法的具体实现的类都是抽象类。这样,如果我们想生命一个抽象类,那么我们只要不实现这个类的实现就可以了,而不用专门在声明它是抽象的。但是在c++中,因为允许类的声明和类的实现分离(类的生命放在一个文件里,而类的实现放在另外一个文件里,或者即使在一个文件里,但是类的成员函数的实现,也不是在类的声明体里),所以,在c++中必须明确的说明这是个纯虚的函数,而不能像Java中那样仅仅不实现它来表示它是个纯虚的。
  (3)还有一点就是,在c++中我们访问对象的成员的时候使用->比较多,而在Java中,我们使用点(.)来表示。这是因为在c++中我们有指针的概念,而在Java中,去掉了这个概念。因为要实现类层面的多态,我们要使用父类的指针,所以,在c++中,往往使用->,而在Java中,使用一个“.”就可以完成同样的事情。一个需要两个按键,而另一个只需要一个就可以。这对于程序员这样一群抱有使用最少的代码解决问题的观念的人来说,这是个不小的改进。

Java:无可争辩地具有C++所有的精华

  在比较Java和C#的时候,你不可能不注意到它们诸多的相似之处,这在某种程度上要归结于它们共同的来源:C和C++。但是,当Gosling和他的同事们坐下来创造Java的时候,他们不仅吸取了C++的能力,而且更重要的是,他们减掉了一些无用特性,后者让C++更容易出错误而且更难学习。C#的设计者加入了很多C++的特性,而Java也加入了这些特性,但是C#却没有去掉C++的最糟糕的一些特性。其结果就是这样一门语言,它仍然为所有人提供了所有的特性,但其结局是内部冲突不断,而且过于复杂。

C#在安全上的削弱

C#有一个用于将代码区域标示为不安全的简单机制。在这些不安全的区域里,Java以及后来的C#安排到位了一些安全措施,用以防止程序员直接修改内存位置,以及使用点

运算,但是这些措施是值得怀疑的。在使用具有垃圾清理功能的高级语言时,如果下到内存地址这一层,就会把对象/内存之间有意作出分离弄混。错误就会容易出现,调

试成了恶梦,缓冲区溢出再次抬头,C和C++里著名的安全漏洞再次现身。

一些论坛说法:

>什么垃圾理论。C#怎么是抄袭JAVA了。

C#抄袭Java是有目共睹,微软自己都承认,只不过改成中性词语:继承和吸取。这个基本历史都会怀疑,如何和这样的程序员沟通?

>java的速度太慢了.而C#的速度非常快,而且他的特性和java,几乎没有什么区别.我就是把C#当一个速度很快的java用.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java和C#CC++