Java并不仅仅是C++语言的一个变种,它们在某些本质问题上有根本的不同:(1)Java比C++程序可靠性更高。有人曾估计每50行C++程序中至少有一个BUG。姑且不去讨论这个数字是否夸张,

但是任何一个C++程序员都不得不承认C++语言在提供强大的功能的同时也提高了程序含BUG的可能性。Java语言通过改

变语言的特性大大提高了程序的可靠性。

(2)Java语言不需要程序对内存进行分配和回收。Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特

性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收 集,Examda

提示: 在Java语言中,内存的分配和回收都是自动进行的,程序员无须考虑内存碎片的问题。

(3)Java语言中没有指针的概念,引入了真正的数组。不同于C++中利用指针实现的“伪数组”,Examda,Java引入

了真正的数组,同时将 容易造成麻烦的指针从语言中去掉,这将有利于防止在c++程序中常见的因为数组操作越界等指针

操作而对系统数据进行非法读写带来的不安全问题。

(4)Java用接口(Interface)技术取代C++程序中的多继承性。接口与多继承有同样的功能,但是省却了多继承在

实现和维护上的复杂性。

Java和C++各有各的优势,无需争论那种语言好,哪种语言不好,能够存在就一定有它的优势,只要你决定了要学编

程就扎实的学好,编程语言都是相同的,学会一种,其他的学起来就很容易了。

具体来说有以下几点:

1.指针

JAVA语言让编程者无法找到指针来直接访问内存,并且增添了自动的内存管理功能,从而有效地防止了c/c++语言中指针操

作失误,如野指针所造成的系统崩溃。但也不是说JAVA没有指针,虚拟机内部还是使用了指针,只是外人不得使用而已。这

有利于Java程序的安全。

2.多重继承

c++支持多重继承,这是c++的一个特征,它允许多父类派生一个类。尽管多重继承功能很强,但使用复杂,而且会引起许多

麻烦,编译程序实现它也很不容易。Java不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了c++多

重继承的功能,又避免了c++中的多重继承实现方式带来的诸多不便。

3. 数据类型及类

Java是完全面向对象的语言,所有函数和变量都必须是类的一部分。除了基本数据类型之外,其余的都作为类对象,包括数组。

对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。而c++允许将函数和变量定义为

全局的。此外,Java中取消了c/c++中的结构和联合,消除了不必要的麻烦。

4. 自动内存管理

Java程序中所有的对象都是用new操作符建立在内存堆栈上,这个操作符类似于c++的new操作符。下面的语句由一个建立了一

个类Read的对象,然后调用该对象的work方法:

语句Read r=new Read();在堆栈结构上建立了一个Read的实例。Java自动进行无用内存回收操作,不需要程序员进行删除。

而c++中必须由程序贝释放内存资源, 增加了程序设计者的负扔。Java中当一个对象不被再用到时,无用内存回收器将给它加

上标签以示删除。JAVA里无用内存回收程序是以线程方式在后台运行的,利用空闲时间工作。

5. 操作符重载

Java不支持操作符重载。操作符重载被认为是c++的突出特征,在Java中虽然类大体上可以实现这样的功能,但操作符重载的

方便性仍然丢失了不少。Java语言不支持操作符重载是为了保持Java语言尽可能简单。

6. 预处理功能

Java不支持预处理功能。c/c++在编译过程中都有一个预编泽阶段,即众所周知的预处理器。预处理器为开发人员提供了方便,

但增加了编译的复杂性。JAVA虚拟机没有预处理器,但它提供的引入语句(import)与c++预处理器的功能类似。

7. Java不支持缺省函数参数,而c++支持

在c中,代码组织在函数中,函数可以访问程序的全局变量。c++增加了类,提供了类算法,该算法是与类相连的函数,c++类方

法与Java类方法+分相似,然而,由于c++仍然支持c,所以不能阻止c++开发人员使用函数,结果函数和方法混合使用使得程序

比较混乱。Java没有不包含在类中的函数,作为一个比c++更纯的面向对象的语言,Java强迫开发人员把所有例行程序包括在类中,事实上,

用方法实现例行程序可激励开发人员更好地组织编码。

8. 字符串

c和c++不支持字符串变量,在c和c++程序中使用Null终止符代表字符串的结束,在Java中字符串是用类对象(strinR和stringBuffer)

来实现的,这些类对象是Java语言的核心,用类对象实现字符串有以下几个优点:

(1)在整个系统中建立字符串和访问字符串元素的方法是一致的;(2)Java字符串类是作为Java语言的一部分定义的,而不是作为外加的延伸部分;(3)Java字符串执行运行时检空,可帮助排除一些运行时发生的错误;(4)可对字符串用“+”进行连接操作。9. goto语句

“可怕”的goto语句是c和c++的“遗物”,它是该语言技术上的合法部分,引用goto语句引起了程序结构的混乱,不易理解,goto

语句子要用于无 条件转移子程序和多结构分支技术。鉴于以广理由,Java不提供goto语句,它虽然指定goto作为关键字,但不支持

它的使用,使程序简洁易读。

l0. 类型转换

在c和c++中有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在c++中可将一浮点值赋予整型变量,并去掉

其尾数。Java不支持c++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。

11. 异常

JAVA中的异常机制用于捕获例外事件,增强系统容错能力。

其中exceptionType表示异常类型。而C++则没有如此方便的机制。

Java并不仅仅是C++语言的一个变种,它们在某些本质问题上有根本的不同:  (1)Java比C++程序可靠性更高。有人曾估计每50行C++程序中至少有一个BUG。姑且不去讨论这个数字是否夸张,但是任何一个C++程序员都不得不承认C++语言在提供强大的功能的同时也提高了程序含BUG的可能性。Java语言通过改变语言的特性大大提高了程序的可靠性。  (2)Java语言不需要程序对内存进行分配和回收。Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收 集,Examda提示: 在Java语言中,内存的分配和回收都是自动进行的,程序员无须考虑内存碎片的问题。  (3)Java语言中没有指针的概念,引入了真正的数组。不同于C++中利用指针实现的“伪数组”,Examda,Java引入了真正的数组,同时将 容易造成麻烦的指针从语言中去掉,这将有利于防止在c++程序中常见的因为数组操作越界等指针操作而对系统数据进行非法读写带来的不安全问题。  (4)Java用接口(Interface)技术取代C++程序中的多继承性。接口与多继承有同样的功能,但是省却了多继承在实现和维护上的复杂性。  Java和C++各有各的优势,无需争论那种语言好,哪种语言不好,能够存在就一定有它的优势,只要你决定了要学编程就扎实的学好,编程语言都是相同的,学会一种,其他的学起来就很容易了。

具体来说有以下几点:

1.指针 JAVA语言让编程者无法找到指针来直接访问内存,并且增添了自动的内存管理功能,从而有效地防止了c/c++语言中指针操作失误,如野指针所造成的系统崩溃。但也不是说JAVA没有指针,虚拟机内部还是使用了指针,只是外人不得使用而已。这有利于Java程序的安全。 2.多重继承 c++支持多重继承,这是c++的一个特征,它允许多父类派生一个类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。Java不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了c++多重继承的功能,又避免了c++中的多重继承实现方式带来的诸多不便。 3. 数据类型及类 Java是完全面向对象的语言,所有函数和变量都必须是类的一部分。除了基本数据类型之外,其余的都作为类对象,包括数组。对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。而c++允许将函数和变量定义为全局的。此外,Java中取消了c/c++中的结构和联合,消除了不必要的麻烦。 4. 自动内存管理Java程序中所有的对象都是用new操作符建立在内存堆栈上,这个操作符类似于c++的new操作符。下面的语句由一个建立了一个类Read的对象,然后调用该对象的work方法:

语句Read r=new Read();在堆栈结构上建立了一个Read的实例。Java自动进行无用内存回收操作,不需要程序员进行删除。而c++中必须由程序贝释放内存资源, 增加了程序设计者的负扔。Java中当一个对象不被再用到时,无用内存回收器将给它加上标签以示删除。JAVA里无用内存回收程序是以线程方式在后台运行的,利用空闲时间工作。 5. 操作符重载 Java不支持操作符重载。操作符重载被认为是c++的突出特征,在Java中虽然类大体上可以实现这样的功能,但操作符重载的方便性仍然丢失了不少。Java语言不支持操作符重载是为了保持Java语言尽可能简单。6. 预处理功能 Java不支持预处理功能。c/c++在编译过程中都有一个预编泽阶段,即众所周知的预处理器。预处理器为开发人员提供了方便,但增加了编译的复杂性。JAVA虚拟机没有预处理器,但它提供的引入语句(import)与c++预处理器的功能类似。 7. Java不支持缺省函数参数,而c++支持 在c中,代码组织在函数中,函数可以访问程序的全局变量。c++增加了类,提供了类算法,该算法是与类相连的函数,c++类方法与Java类方法+分相似,然而,由于c++仍然支持c,所以不能阻止c++开发人员使用函数,结果函数和方法混合使用使得程序比较混乱。 Java没有不包含在类中的函数,作为一个比c++更纯的面向对象的语言,Java强迫开发人员把所有例行程序包括在类中,事实上,用方法实现例行程序可激励开发人员更好地组织编码。 8. 字符串 c和c++不支持字符串变量,在c和c++程序中使用Null终止符代表字符串的结束,在Java中字符串是用类对象(strinR和stringBuffer)来实现的,这些类对象是Java语言的核心,用类对象实现字符串有以下几个优点: (1)在整个系统中建立字符串和访问字符串元素的方法是一致的; (2)Java字符串类是作为Java语言的一部分定义的,而不是作为外加的延伸部分; (3)Java字符串执行运行时检空,可帮助排除一些运行时发生的错误; (4)可对字符串用“+”进行连接操作。 9. goto语句 “可怕”的goto语句是c和c++的“遗物”,它是该语言技术上的合法部分,引用goto语句引起了程序结构的混乱,不易理解,goto语句子要用于无 条件转移子程序和多结构分支技术。鉴于以广理由,Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使用,使程序简洁易读。 l0. 类型转换 在c和c++中有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在c++中可将一浮点值赋予整型变量,并去掉其尾数。Java不支持c++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。 11. 异常 JAVA中的异常机制用于捕获例外事件,增强系统容错能力

其中exceptionType表示异常类型。而C++则没有如此方便的机制。

c 与java的区别_C/C++与java的区别相关推荐

  1. c语言和java语法的区别_c语言和java语法有区别吗?

    c语言和java在语法上有区别,区别是: 1.C语言有指针,java没有指针: C语言的语法比较简单,但是它的亮点指针很容易出错,想要好好的运用指针是件很难的事情,用好了,对程序有很好的帮助,反之,就 ...

  2. c语言和java的区别_C语言和Java的区别有哪些

    C语言和Java的区别有哪些 作为编程界的两大编程语言-C语言和Java,它们之间有什么不同呢?下面小编给大家整理了C语言和Java的区别,供大家参阅. 1.C语言 C语言是一门通用计算机编程语言,应 ...

  3. java c 关系_C语言和java之间的关系

    近些年来,移动互联网在全世界范围内的迅速发展,使得计算机行业也迅速发展,那c语言和java语言作为计算机语言中两种,相应的逐渐被人们了解和关注,想学习和从事c语言和java的朋友也越来越多.那同样都是 ...

  4. python语言与c语言java的区别_c语言和java有什么区别

    区别:1.单文件的编译时间java比C语言快:2.C语言可以直接操作内存,java不能直接操作:3.C语言可以封装动态库,java不行:4.C语言有指针,java没有指针:5.C语言可以直接操作串口, ...

  5. java和c语言的语法区别_c语言和java的语法区别是什么?

    c语言和java的语法区别 单文件的编译时间java比C语言快: C语言可以直接操作内存,java不能直接操作: C语言可以封装动态库,java不行: C语言的代码不容易跨平台,java的代码容易跨平 ...

  6. java 函数表_C语言、Java语言的符号表区别和特点是什么?分别是如和处理函数参数的?...

    1.语法类似: 由于Java可以算是从C 发展而来的,因此Java与C语言的语法比较类似 2.编程的熟练程度就是对语言程序库的掌握程度: 从某种程度上来说,编程语言都是由语法和相应的程序库所构成,Ja ...

  7. stdmove 跟 左键引用 区别_C++ auto和decltype的区别

    通过<C++ auto>和<C++ decltype>两节的学习,相信大家已经掌握了 auto 和 decltype 的语法规则以及使用场景,这节我们将 auto 和 decl ...

  8. c和python区别_C语言和python的区别

    Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言.本萌新也刚开 ...

  9. java转换为c#_C#vs Java哪一个更快? 将25k C#转换为Java(2)

    java转换为c# 在上一篇文章中,我描述了如何将25k行C#转换为Java以及从该练习中学到的教训. 我收到以下问题: 顺便说一句很棒的文章. 移植代码后,性能与C#版本相比如何? 改写系统的动机之 ...

最新文章

  1. 变种GandCrab样本分析
  2. python docx 字体大小_聊聊python办公自动化之Word(上)
  3. sed mysql配置文件_shell解析my.cnf配置文件
  4. Vungle收购移动端创意技术公司TreSensa
  5. python中math函数库矩阵_Python中矩阵库Numpy基本操作详解
  6. Fortinet 防火墙受高危漏洞影响,可遭远程攻击
  7. 系统学习深度学习(二十)--ResNet,DenseNet,以及残差家族
  8. servlet原理及访问时序图
  9. cmd命令查询电脑序列号_如何在Windows10中查找计算机序列号/主板型号
  10. iPhone 检测 iPhone X 设备的几种方式和分辨率终极指南
  11. 下一代计算机网络技术指什么,下一代计算机网络技术
  12. cve漏洞(cve漏洞库)
  13. 乐观锁和悲观锁的简单理解
  14. 帝国cms tag生成html,帝国CMS tags标签多种调用方法
  15. 没想到,还有小白不知道怎么比较数组是否相等以及检出不匹配项
  16. NFT这么香,到底解决了什么问题?
  17. AV夜话#4 李超:聊聊Chat-GPT
  18. php 生成 pdf dompdf 库使用
  19. java-php-python-ssm校园闲置物品交易系统计算机毕业设计
  20. android 飞行模式做了什么好处,手机飞行模式居然这么多好处,你竟然都不知道!...

热门文章

  1. 程序员该如何抉择公司?
  2. 共抗疫情,飞书助力学校、企业等组织机构高效远程协作
  3. 架构思维-高业务复杂度系统建设思路
  4. Scrum工具Leangoo产品白皮书
  5. python 管道 非阻塞_python – 非阻塞Scrapy管道到数据库
  6. 白帽子讲Web安全(纪念版)
  7. 基于点线特征避免单目视觉SLAM的退化
  8. DETR3D:将DETR用于3D目标检测任务
  9. 想象中的论文答辩和真实的论文答辩!哈哈哈哈哈哈……
  10. 为了提升在小数据集上的性能,有学者让神经网络像生物一样“进化”了|CVPR2021 Oral...