Java语言与C++语言的差异总结

发表于:2014-8-14 09:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Jessica程序猿    来源:51Testing软件测试网采编

  Java的设计者曾说过,设计这门语言的灵感主要来自于C++。
  世上先有C++,然后才有Java,整个Java语言的发展历史就是一部对C++的填坑史。所以在Java语言学习过程中,将其与C++语言对比是一件有意义的事情。通过这些对比,我们能够了解到Java语言相对于C++语言有哪些改进,能带给我们哪些进步,这样对于更加深入理解这两种语言是大有裨益的。
  下面我总结一下Java语言与C++语言的各种差异。
  1、Java用来操纵对象的引用可以先初始化再指向对象,而C++的引用必须在初始化时就指向对象。
  2、Java类除static和final外其他函数定义默认是虚函数,而C++用virtual关键字定义定义函数才是虚函数。
  3、Java有一套继承自object类型的单根继承结构,而C++没有标准库内置的类继承体系。
  4、Java只能通过new在堆上创建对象,基本类型除外,而C++除了new还是可以创建全局对象或者栈对象。
  5、Java有自带垃圾回收机制,不用关心对象的内存释放,而C++需要手动释放通过new创建的对象。
  6、Java数组成员能初始化默认值null,提供未初始化的访问和越界访问保护,而C++不提供这个机制。
  7、Java局部作用域定义的变量不能隐藏更大作用域定义的变量,而C++可以隐藏。
  8、Java类的基本类型成员变量可以自动初始化为默认值,类的复杂类型成员变量或者函数的基本类型成员变量如果没有初始化会报编译错误,而C++不提供这个机制。
  9、Java属于纯面对对象语言,函数只能定义在类里,而C++可以将函数定义在类外。
  10、Java函数调用时入参传递,对象类型参数只能传引用不能传值,基本类型参数可以传值,而C++可以使用对象传值方式。
  11、Java用带反转域名的类库命名方式来解决名字污染问题,而C++使用名字空间来解决。
  12、Java类所有成员函数实现和变量初始化都要写在类定义里,而C++类成员函数在类定义里申明,在类外实现,成员变量可以在类定义里初始化。
  13、Java通过类名来引用类的静态成员时,是用类名加.号来引用,而不是C++的:号来引用。
  14、Java每个文件只能有一个public类的名称与文件名称相同,包外可以访问这个类但是无法访问其他类,并且这个类有一个main函数,而C++没有这个约束。
  15、Java注释采用特定的格式时,可以用javadoc来解析成帮助文档,而C++不提供这个机制。
  16、Java支持>>>操作符的无符号移位方式,不论正负数都用0填充,而C++没有这个操作符。
  17、Java不支持操作符重载机制,而C++支持这个机制。
  18、Java没有sizeof操作符,因为所有数据类型在所有机器中的大小是相同的,而C++支持sizeof操作符且数据类型在不同机器里大小不一定一致。
  19、Java不支持从整形到布尔型的转换,而C++支持这个机制。
  20、Java支持foreach方式的遍历数组或容器的循环方法,而C++不提供这个机制。
  21、Java支持带标签的continue和break语句,用以提供有限的类似C++ goto语句的功能。
  22、Java不支持C++的析构函数,但是提供了一个finalize函数,会在垃圾回收之前执行,但是除了一些特殊情况外应尽少使用finalize函数去释放资源,而是在程序中主动显式的去释放资源。
  23、Java类的静态成员只有在类被第一次实例化或者第一次访问类的静态成员时才会初始化一次,而C++类的静态成员在类实例化前就被初始化了,且跟类是否有实例化没关系。
  24、Java没有C++类成员初始化列表,只能在类成员被定义后再显示给类成员赋值。
  25、Java数组不能越界写,否则会报错误,而C++不提供这个机制。
  26、Java不支持预编译宏机制,因为它不用考虑跨平台差异编译控制,而C++支持这个机制。
  27、Java提供包访问控制权限能让包内的类互相访问,而包外的类不能访问包内的类,而C++不提供这个机制。
  28、Java支持给类设定public或包访问控制权限,而C++不提供这个机制。
  29、Java所有非基本类型对象都有一个特殊的toString方法,用于将对象转变成String对象,而C++要靠定义String操作符处理函数来实现。
  30、Java支持在子类不会覆盖父类的同名函数,并且可以用super关键字来显示调用父类的函数,而C++的子类会直接覆盖父类的同名函数。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号