C++ 与 Java比较:C++ 与 Java 之间的30大差异(附示例)

2021年11月8日15:41:59 发表评论 1,747 次浏览

这个深入的教程解释了两种面向对象的编程语言C++ 与 Java比较的一些主要区别:

C++ 和 Java 都是面向对象的编程语言。然而,这两种语言在许多方面彼此不同,这里列出了C++与Java的30个差异

C++与Java有什么区别?简单来说,C++ 是从 C 派生而来的,它同时具有面向过程和面向对象的编程语言的特性。C++ 是为应用程序和系统开发而设计的。

Java 建立在虚拟机上,该虚拟机本质上非常安全且具有高度可移植性。它与综合库分组,为现有平台的抽象提供支持。

Java 主要是为应用程序编程而设计的,具有打印系统解释器的功能,后来发展为网络计算。

你会学到什么:

  • C++ 与 Java 之间的主要区别
  • 表格格式:C++ 与 Java
  • C++ 和 Java 中的常见问题
  • 结论

C++ 与 Java比较:C++ 与 Java 之间的主要区别

现在让我们在本教程中继续讨论 C++ 与 Java 之间的一些主要区别。

#1) 平台独立性

C++爪哇
C++ 是一种平台相关语言。
用 C++ 编写的源代码需要在每个平台上编译。
Java 是平台无关的。
一旦编译成字节码,就可以在任何平台上执行。

#2) C++与Java有哪些不同编译器和解释器

C++爪哇
C++ 是一种编译语言。

C++编写的源程序被编译成目标代码,然后可以执行该目标代码以产生输出。
Java 是一种编译型语言,也是一种解释型语言。
Java 源代码的编译输出是与平台无关的字节码。

#3) 便携性

C++爪哇
C++ 代码不可移植。
必须为每个平台编译它。
然而,Java 将代码转换为字节码。
这个字节码是可移植的,可以在任何平台上执行。

#4) 内存管理

C++爪哇
C++ 中的内存管理是手动的。
我们需要使用 new/delete 操作符手动分配/释放内存。
在 Java 中,内存管理是系统控制的。

#5) 多重继承

C++爪哇
C++ 支持各种类型的继承,包括单继承和多继承。
虽然存在多重继承带来的问题,但是C++使用virtual关键字来解决这个问题。
Java,只支持单继承。
使用Java 中的接口可以实现多重继承的效果。

#6) C++与Java有什么区别重载

C++爪哇
在 C++ 中,方法和运算符可以重载。这就是静态多态。在 Java 中,只允许方法重载。
它不允许运算符重载。

#7) 虚拟关键字

C++爪哇
作为动态多态的一部分,在 C++ 中,virtual 关键字与函数一起使用,以指示可以在派生类中覆盖的函数。这样我们就可以实现多态。在 Java 中,没有 virtual 关键字。但是,在 Java 中,默认情况下所有非静态方法都可以被覆盖。
或者简单来说,Java 中的所有非静态方法默认都是虚拟的。

#8) C++与Java的30个差异指针

C++爪哇
C++ 是关于指针的。
正如在前面的教程中看到的,C++ 对指针有很强的支持,我们可以使用指针进行很多有用的编程。
Java 对指针的支持有限。
最初,Java 完全没有指针,但后来的版本开始对指针提供有限的支持。
我们不能像在 C++ 中那样悠闲地在 Java 中使用指针。

#9) 文档注释

C++爪哇
C++ 不支持文档注释。Java 内置了对文档注释 (/**...*/) 的支持。通过这种方式,Java 源文件可以拥有自己的文档。

#10) 线程支持

C++爪哇
C++ 没有内置线程支持。它主要依赖于第三方线程库。Java 是内置线程支持的类“线程”。我们可以继承线程类,然后重写run方法。

还有一些不同……

#11) 根层次结构

C++ 是过程性的,也是面向对象的编程语言。因此它不遵循任何特定的根层次结构。

Java 是一种纯面向对象的编程语言,具有单一的根层次结构。

#12 )源代码和类关系

在 C++ 中,源代码和文件名没有任何关系。这意味着我们可以在 C++ 程序中有许多类,文件名可以是任何东西。它不必与类名相同。

在 Java 中,源代码类和文件名之间有着密切的关系。包含源代码的类和文件名应该相同。

例如,如果我们在 Java 中有一个名为salary 的类,那么包含这个类代码的文件名应该是“salary.java”。

#13 )概念

C++ 程序背后的概念是编写一次并在任何地方编译,因为 C++ 不是平台无关的。

相反,对于 Java 程序来说,它是一次编写,到处运行,因为 Java 编译器生成的字节码是平台无关的,可以在任何机器上运行。

#14 )与其他语言的兼容性

C++ 建立在 C 之上。C++ 语言与大多数其他高级语言兼容。

Java 与其他语言不兼容。由于 Java 受到 C 和 C++ 的启发,因此其语法与这些语言相似。

#15 )C++ 与 Java比较编程语言的类型

C++ 既是面向过程的又是面向对象的编程语言。因此,C++ 具有特定于过程语言的特性以及面向对象编程语言的特性。

Java 是一种完全面向对象的编程语言。

#16 )库接口

C++ 允许直接调用本机系统库。因此它更适合系统级编程。

Java 没有对其本机库的直接调用支持。我们可以通过 Java Native Interface 或 Java Native Access 调用这些库。

#17 )C++与Java有哪些不同区别特征

与过程语言和面向对象语言相关的特性是 C++ 的显着特征。

自动垃圾收集是 Java 的显着特征。同时,Java 不支持析构函数。

#18 )类型语义

就 C++ 的类型语义而言,原始类型和对象类型是一致的。

但是对于Java,原始类型和对象类型之间没有一致性。

#19 )输入机制

C++ 分别使用 cin 和 cout 以及 '>>' 和 '<<' 运算符来读取和写入数据。

在java中,System类用于输入输出。为了读取输入,使用 System.in 一次读取一个字节。构造 System.out 用于写入输出。

#20)访问控制和对象保护

C++ 有一个灵活的对象模型,带有控制访问的访问说明符和确保保护的强封装。

Java 的对象模型比较繁琐,封装较弱。

#21) Goto 语句

C++ 支持 goto 语句,但应尽量减少其使用,以防止在程序中使用它产生后果。

Java 不支持 goto 语句。

#22 )范围解析运算符

作用域解析运算符用于访问全局变量并定义类外的方法。

C++ 支持范围解析运算符,因为它使用它来访问全局变量。它还允许我们在类之外定义函数并使用范围解析运算符访问它们。

相比之下,Java 不支持范围解析运算符。Java 也不允许在外部定义函数。与程序相关的所有内容包括主函数都需要在一个类中。

#23 )尝试/捕获块

在 C++ 中,即使我们知道代码可能会抛出异常,我们也可以排除 try/catch 块。

但是,在 Java 中,如果我们确定代码会抛出异常,那么我们必须将这段代码包含在 try/catch 块下。Java 中的异常是不同的,因为它不支持析构函数。

#24 )C++与Java的30个差异运行时错误检测

在 C++ 中,运行时错误检测是程序员的责任。

在 Java 中,运行时错误检测由系统控制。

#25 )语言支持

由于它靠近硬件和允许访问系统资源的库,C++ 更适合系统编程,尽管我们有广泛的应用程序,包括用 C++ 开发的数据库、企业、游戏等。

#26 )C++与Java有什么区别数据和函数

C++ 具有全局作用域和命名空间作用域。因此数据和函数也可以存在于类之外。

在 Java 中,所有数据和函数都需要在类中。没有全局作用域,但是可以有包作用域。

#27 )结构和联合

结构和联合是可以包含具有不同数据类型的成员的数据结构。C++ 支持结构和联合。

但是,Java 不支持结构或联合。

#28 )对象管理

在 C++ 中,对象是手动管理的。对象的创建和销毁分别使用 new 和 delete 运算符手动执行。我们还为类对象使用构造函数和析构函数。

尽管 Java 支持构造函数,但它不支持析构函数。Java 还严重依赖自动垃圾收集来收集和销毁对象。

#29 )参数传递

按值传递和按引用 传递是编程中使用的两种重要的参数传递技术。Java 和 C++ 都支持这两种技术。

#3 0)硬件

C++接近硬件,有很多可以操作硬件资源的库。由于其与硬件的接近性,C++ 经常用于系统编程、游戏应用程序、操作系统和编译器。

Java 多为应用程序开发语言,与硬件无关。

表格格式:C++ 与 Java比较

下面给出的是我们已经讨论过的 C++ 和 Java 之间比较的表格表示。

编号比较参数C++爪哇
1平台独立性C++ 是平台相关的。Java 是平台无关的。
2编译器和解释器C++ 是一种编译语言。Java 是一种编译型语言,也是一种解释型语言。
3源代码和类关系与类名和文件名没有严格的关系。强制类名和文件名之间的严格关系。
4概念在任何地方编写一次编译。一次编写,随时随地运行。
5与其他语言的兼容性除了面向对象的特性外,与 C 兼容。语法取自 C/C++。
不向后兼容任何其他语言。
6编程语言类型面向过程和面向对象。面向对象。
7图书馆界面允许直接调用本机系统库。仅通过 Java Native 接口和 Java Native Access 调用。
8根层次结构没有根层次结构。遵循单根层次结构。
9区别特征支持过程以及面向对象的功能。没有破坏者。自动垃圾收集。
10可移植性C++ 代码不可移植。Java 是可移植的。
11类型语义在原始类型和对象类型之间保持一致。不一致。
12输入机制Cin 和 Cout 用于 I/O。System.in 和 System.out.println
13访问控制和对象保护灵活的对象模型和一致的保护。对象模型繁琐,封装性弱。
14内存管理手动的系统控制。
15多重继承展示缺席的
16转到语句支持 Goto 语句。不支持 goto 语句。
17范围解析运算符展示缺席的
18尝试/捕获块可以排除 try/catch 块。如果代码应该抛出异常,则无法排除。
19超载支持运算符和方法重载。不支持运算符重载。
20虚拟关键字支持有助于覆盖的虚拟关键字。没有 virtual 关键字,所有非静态方法默认都是 virtual 并且可以被覆盖。
21运行时错误检测留给程序员。系统责任
22语言支持主要用于系统编程。主要用于应用程序编程。
23数据和函数数据和函数存在于类之外。支持全局和命名空间范围。数据和函数仅存在于类中,包范围可用。
24指针支持指针。仅对指针的有限支持。
25结构和工会支持的不支持
26对象管理使用新建和删除手动对象管理。使用垃圾收集的自动对象管理。
27参数传递支持按值调用和按引用调用。仅支持按值调用。
28线程支持线程支持不是很强,依赖第三方。非常强大的线程支持。
29硬件更接近硬件。与硬件的交互性不是很强。
30文档注释不支持文档注释。支持为 Java 源代码创建文档的文档注释(/**…*/)。

到目前为止,我们已经详细了解了 C++ 和 Java 之间的主要区别。即将到来的部分将回答编程领域中与 C++ 和 Java 相关的一些常见问题。

C++ 与 Java比较常见的问题

Q #1) C++ 和 Java 哪个更好?

答:嗯,我们不能肯定地说哪个更好。C++ 和 Java 都有自己的优点和缺点。虽然 C++ 最适合系统编程,但我们不能用 Java 来做。但是 Java 在 Web、桌面等应用程序中表现出色。

事实上,C++ 可以做任何事情,从系统编程到企业再到游戏。Java 可以做更多的网络或企业。有些应用程序,例如某些低级编程应用程序或游戏等,不能留给 Java 开发。

因此,这完全取决于我们正在开发的应用程序。最好的方法是事先评估两种语言的优缺点,并验证它们对于我们正在开发的应用程序的独特性,然后得出最好的结论。

Q #2) C++ 比 Java 更强大吗?

回答:这又是一个棘手的问题!当谈到语法或学习语言有多容易时,Java 得分。当涉及系统编程和/或其他低级应用程序时,C++ 更强大。

有些人可能会争辩说,拥有自动 GC 收集、没有指针、没有多重继承使 Java 更强大。

但是在速度方面,C++ 是强大的。同样在我们需要存储状态的游戏等应用程序中,自动垃圾收集可能会破坏任务。因此 C++ 在这里显然是强大的。

Q #3) 我们可以在不了解 C 或 C++ 的情况下学习 Java 吗?

回答:是的,一定!

一旦我们了解了编程的基础知识和面向对象的编程概念,我们就可以开始学习 Java。

Q #4) C++与Java的30个差异C++ 和 Java 一样吗?

回答:在某些方面,是的,但在某些方面,不是。

例如,C++ 和 Java 都是面向对象的编程语言。它们可用于应用程序开发。它们具有相似的语法。

但在其他情况,如内存管理、继承、多态等,C++和Java完全不同。类似地,当涉及原始数据类型、对象处理、指针等时,两种语言都是不同的。

Q #5) C++与Java有哪些不同Java 是用 C++ 编写的吗?

答:从 Sun 和 IBM 的 Java 虚拟机 (JVM) 的意义上来说,Java 是用 C++ 编写的。Java 库在 Java 中。其他一些 JVM 是用 C 编写的。

C++ 与 Java比较结论

C++ 和 Java 都是面向对象的编程语言。此外,C++ 也是一种过程语言。有一些特性,如继承、多态、指针、内存管理等,这两种语言彼此完全不同。

C++与Java有什么区别?C++ 有一些特性,如接近硬件、更好的对象管理、速度、性能等,使其比 Java 更强大,从而激励开发人员使用 C++ 进行低级编程、高速游戏应用程序、系统编程, 等等。

同样,Java 更简单的语法、自动垃圾收集、缺少指针、模板等,使 Java 成为基于 Web 的应用程序的最爱。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: