Java采用了C及C++的语法格式,对于学习过C及C++的程序设计者来说,学习Java将有可能很轻松.但是,如果仔细检查Java语言的许多细节,就会发现Java取消了不少C及C++的特性,并且加入了一些新的特性.这些差异包括:
不再有指针(Pointer)的概念.
这是Java和C/C++在语法上的主要区别之一.在C及C++中,指针的灵活运用将会给程序设计带来极大的便利,但是其灵活性也成为了导致程序不稳定的一个主要因素.配合C及C++的内存管理策略,编程人员必须亲自跟踪自己向系统申请到的内存,最后确认交还给系统.并且在使用指针时,要随时注意是否超过合法的内存空间,造成Segmentation Fault或General Protection Fault这样的问题.
Java提供了一种引用(Reference)类型用来替代指针,通过引用去访问申请到的内存空间,可以确保不会访问不属于自己的内存空间,同时,程序的执行系统也可以动态地做内存垃圾回收工作,将那些被取消引用的内存空间回收给系统使用.这种动态内存分配机制,通过牺牲一定的灵活性,保证了内存分配一定程度上的安全性.
不再有函数(Function)的概念.
Java编程语言中,取消了结构化语言中最重要的部分mm函数.在面向对象程序设计的概念里,对象的数据才是真正的主题,而处理对象数据的方法则必须依附在对象内才有意义.因此函数概念完全是不必要的.这强化了面向对象的开发策略.
不再使用structure、union和typedef.
事实上,在C++中就可以去掉C中的structure和union等对复杂数据的自定义结构类型了,因为类(Class)的定义方式完全可以做到这项功能.而typedef的功能也可以由类来实现.虽然C++这样的设计是为了和C兼容,但是这些毕竟是多余的语言特点,在Java语言中便被抛弃了.
不再有类的多重继承(Multiple Inheritance).
在C++中,多重继承是一项很强的功能,但也是较难掌握的.取消多重继承降低了Java语言的功能,但它使Java看起来更为简洁.同时,Java也提供了接口(Interface)的方式,可以实现部分多重继承的作用.和多重继承的不同之处在于接口并不会定义类方法的内容,以及类中的数据.
不再有操作符重载(Operator Overloading).
操作符重载被看作是C++的一个特色.在C++中,利用操作符重载,程序设计者通过对现有运算符赋予自己的定义,可以使程序看起来更为自然.但是,如果使用不当,也会使整个程序的可读性大受影响.同时,这一功能的存在也并非必要,程序设计者可以定义类中的方法来达到同样的目的.
取消了自动类型转换.
Java是一种强类型检查的编程语言,对于诸如浮点型变量赋值给整型变量这样的情况而言,在C++的语法中是允许的,最多只是在编译时给出警告信息.但是,在Java中,除非写明强制类型转换,否则编译无法通过.
不再有预处理器(preprocessor)功能.
利用C/C++中提供的#define、#include等预处理指令,厉害的程序设计人员可以自己开发一套只有自己才看得懂的宏指令集.从软件工程的角度上看,这对团队开发软件和整个软件的维护都是十分不利的.同时,预编译后的程序代码和程序设计者看到的程序代码是不同的.如果宏指令集有错,编译器产生的错误信息将不会是编程人员所预期的,这增加了程序调试的难度.
取消了goto语句.
在C++中,goto语句已经不被建议使用了,保留goto只是为了和C语法兼容.在Java中goto语句被完全抛弃了,与此同时,Java又扩大了break语句和continue语句的功能,通过使用break和continue,程序流程被允许在多层循环中跳转.
可以这样说,Java编程语言是一种简洁而有效的纯面向对象的编程语言.而C++语言因为要与C兼容(C++语言是作为C语言的一个超集被定义的),所以在面向对象的特性方面不如Java好.详情请进入:

转载于:https://www.cnblogs.com/521taobao/archive/2012/03/17/2402466.html

Java语言和C++语言的差异的更多相关文章

  1. IOS-2-C语言和Objective-C语言衔接学习资料

    前言:在IOS学习中.通常会先学习一周的C语言,两周的Objective-C语言,这是今后开发的最基础最重要的部分,以下给大家分享一下培训课上的精简资料: C语言和Objective-C语言衔接学习资 ...

  2. 混合使用C++语言和Objective-C语言

    如果你的源文件扩展名是.m的,你还需要改成.mm,这样编译器才知道你将会在该文件中混合使用C++语言和Objective-C语言.

  3. C语言和Python语言在存储变量方面的不同

    C语言和Python语言在存储变量方面的不同 众所周知,Python是脚本语言,边解释边执行,而C语言是编译型语言 存储变量: C语言定义变量,变量本身代表的就是大小,任何一个字母或者数字 符号均可以 ...

  4. C语言和go语言之间的交互

    一.go代码中使用C代码 go代码中使用C代码,在go语言的函数块中,以注释的方式写入C代码,然后紧跟import "C" 即可在go代码中使用C函数 代码示例: go代码:tes ...

  5. Go 语言和 Scala 语言对比

    我在Google写过Go(自己的业余时间),也在LinkedIn写过Scala.两者都是具有一流的并发特性的现代语言. 下面的回答是基于我编写大规模的软件的经验得出. Go是一种开发模式严格固定,并且 ...

  6. C语言和go语言之间的交互 - C语言中使用go语言,使用的go语言又使用了c语言

    一.go语言中使用C语言 go代码中使用C代码,在go语言的函数块中,以注释的方式写入C代码,然后紧跟import “C” 即可在go代码中使用C函数 代码示例: go代码:testC.go 1 pa ...

  7. Unicode与UTF-8互转(c语言和lua语言)

    1. 基础 1.1 ASCII码 我们知道, 在计算机内部, 全部的信息终于都表示为一个二进制的字符串. 每个二进制 位(bit)有0和1两种状态, 因此八个二进制位就能够组合出 256种状态, 这被 ...

  8. Java语言和JVM的使用说明书

    Java Language and Virtual Machine Specifications 详细介绍了Java语言各个版本的功能/JVM的工作原理 建议详读/深度 各个版本,在线看或者pdf下载

  9. java语言和jdk、jre基础

    Java语言平台 * J2SE(Java 2 Platform Standard Edition)标准版  * 是为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可以完成一些桌 ...

随机推荐

  1. vue中的$router 和 $route的区别

    最近在学习vue的单页面应用开发,需要vue全家桶,其中用到了VueRouter,在路由的设置和跳转中遇到了两个对象$router 和 $route ,有些傻傻分不清,后来自己结合网上的博客和自己本地 ...

  2. Linux基础;Day07

    dns服务  dns的作用:地址解析 IP -> 域名(反向)  域名 -> IP(正向) 类型 主域名服务器 负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改. ...

  3. 【数据库】MySQL数据库(三)

    一.MySQL当中的索引: 数组当中我们见过索引:它的好处就是能够快速的通过下标.索引将一个信息查到:或者说 能够快速的定位到一个信息: 1.MySQL中的索引是什么? 它是将我们表中具有索引的那个字 ...

  4. flask 入门之 logging

    如想看详细说明,请到: 1.https://www.cnblogs.com/yyds/p/6901864.html 2.https://docs.python.org/2/library/loggin ...

  5. 第一章 AT&T

    1.一个公司(企业)越庞大,就越危险:越复杂,就越濒临坍塌:快速发展的同时,也埋下了隐患. 2.再庞大的企业也不可能永久站立,下个十年谁也说不准谁会在浪潮之巅. 3.一个人能走多远,往往取决于他能看多 ...

  6. 【视频+图文】Java经典基础练习题(六):猴子吃桃子问题

    目录 一.具体题目 二.视频讲解 三.思路分析(逆向思维) 四.代码+结果 代码: 结果: 五.彩蛋 一.具体题目 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个  第二天 早上又将剩下 ...

  7. python3(二十七)property

    """ """ __author__ = 'shaozhiqi' # 绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单, # 但是, ...

  8. Atlas运行时资源不足报错 -bash: fork: retry: 资源暂时不可用 Out of system resources

    目的:运行Atlas并使用Azkaban执行操作任务 环境:Centos 6 内存大小:12G 启动下面的任务后还剩内存将近5G 问题: 当mysql_to_hdfs_db和其他job同时运行时集群很 ...

  9. thinkphp5.0远程执行漏洞

    0x01 漏洞简介 由于ThinkPHP5 框架控制器名 没有进行足够的安全监测,导致在没有开启强制路由的情况下,可以伪装特定的请求可以直接Getshell(可以控制服务器) 0x02 环境搭建 Ph ...

  10. Hadoop学习笔记(1)-Hadoop在Ubuntu的安装和使用

    由于小编在本学期有一门课程需要学习hadoop,需要在ubuntu的linux系统下搭建Hadoop环境,在这个过程中遇到一些问题,写下这篇博客来记录这个过程,并把分享给大家. Hadoop的安装方式 ...