Java 与 C++
Java 是一种通用的高级编程语言。Java 编程语言最初由 Sun Microsystems 开发,由 James Gosling 发起,并于 1995 年作为 Sun Microsystems 的 Java 平台(Java 1.0 [J2SE])的核心组件发布。
C++ 是一种中级、区分大小写、面向对象的编程语言。Bjarne Stroustrup 在 Bell Labs 创建了 C++。C++ 是一种平台无关的编程语言,可在 Windows、Mac OS 和 Linux 上运行。
阅读本章以了解 C++ 和 Java 的概述,以及区分这两种流行编程语言的特性。
什么是 Java?
Java 标准版的最新发布是 Java SE 23。随着 Java 的进步和广泛流行,构建了多种配置以适应各种类型的平台。例如:用于企业应用的 J2EE,用于移动应用的 J2ME。
新的 J2 版本分别重命名为 Java SE、Java EE 和 Java ME。Java 保证实现 Write Once, Run Anywhere(一次编写,到处运行)。
Java 的特性
Java 最重要的特性如下所示 −
- 面向对象 − 在 Java 中,一切皆 Object。Java 基于对象模型,因此易于扩展。
- 平台无关 − 与包括 C 和 C++ 在内的许多其他编程语言不同,Java 编译时不是编译成特定平台的机器码,而是编译成平台无关的字节码。此字节码通过网络分发,并由运行它的任何平台上的 Java Virtual Machine (JVM) 解释执行。
- 安全 − Java 高度安全,因为它不允许任何人直接访问内存。它具有字节码验证和安全 API。
- 可移植 − Java 是架构中立的,规范中没有实现相关的方面,这使得 Java 可移植。
- 健壮 − Java 通过强调编译时错误检查和运行时检查,努力消除容易出错的情况。
- 多线程 − 借助 Java 的 multithreaded feature,可以编写同时执行多个任务的程序。此设计特性允许开发者构建流畅运行的交互式应用。
- 解释执行 − Java 字节码即时翻译为本地机器指令,且不存储在任何地方。开发过程更快且更具分析性,因为链接是一个增量且轻量级的过程。
示例
查看以下简单的 Java 程序 −
package com.;
import java.util.Scanner;
public class JavaTester {
public static void main(String args[]) {
String a, b;
Scanner scanner = new Scanner(System.in);
System.out.println("Enter The value for variable a");
a = scanner.nextLine();
System.out.println("Enter The value for variable b");
b = scanner.nextLine();
System.out.println("The value you have entered for a is " + a);
System.out.println("The value you have entered for b is " + b);
scanner.close();
}
}
在我们的示例中,我们声明了两个变量 “a” 和 “b”,并为这些变量赋值。请注意,在 Java 中,我们需要显式声明变量的数据类型,因为 Java 是一种严格类型语言。作为面向对象语言,Java 使用对象来执行任何操作。我们使用了 Scanner class 对象从控制台读取用户输入,控制台由 System.in 对象表示。System.out 对象的 println() 方法用于打印接收到的值。
执行此 Java 代码将产生以下 output −
Enter The value for variable a 10 Enter The value for variable b 20 The value you have entered for a is 10 The value you have entered for b is 20
什么是 C++?
C++ 是一种静态类型、编译型、多范式、通用的编程语言,学习曲线陡峭。视频游戏、桌面应用程序和嵌入式系统广泛使用它。C++ 与 C 高度兼容,几乎可以无需任何修改编译所有 C 源代码。面向对象编程使 C++ 结构更加良好。
C++ 的特性
让我们来看看 C++ 的一些特性以及它流行的原因。
- 中级语言 − 它是一种中级语言,因为它既可用于系统开发,也可用于大规模消费级应用程序,如媒体播放器、Photoshop、游戏引擎等。
- 执行速度 − C++ 代码运行速度快。因为它是编译型语言,并且广泛使用过程。垃圾回收、动态类型和其他现代特性会阻碍程序执行。
- 面向对象语言 − 面向对象编程灵活且易于管理。可以开发大型应用程序。代码增长会使过程式代码更难处理。这是 C++ 相对于 C 的主要优势。
- 丰富的库支持 − C++ 拥有庞大的库。支持第三方库以实现快速开发。
示例
让我们通过一个示例来理解 C++ 的语法 −
#include <iostream>
using namespace std;
int main() {
int a, b;
cout << "Enter The value for variable a \n";
cin >> a;
cout << "Enter The value for variable b";
cin >> b;
cout << "The value of a is "<< a << "and" << b;
return 0;
}
在我们的示例中,我们通过键盘从用户那里获取两个变量“a”和“b”的输入,并在控制台上显示数据。
执行后,它将产生以下输出 −
Enter The value for variable a 10 Enter The value for variable b 20 The value of a is 10 and 20
Java 和 C++ 的区别
下表比较并对比了 C++ 和 Java 的重要特性 −
| Java | C++ |
|---|---|
| Java bytecode 可在任何 operating system 上运行。Bytecode 是针对 JVM 的。 JVM 然后解释 bytecode 并运行底层特定于机器的代码。因此,Java 代码无需更改即可在不同机器上运行。 |
它无法在每个 operating system 上运行,因为不同系统上的 libraries 不同。 |
| 它 可在任何 OS 上运行。Java 代码是 platform independent 的。不需要 platform specific 代码。int、long 的大小在所有 platform 上保持相同。 | C++ 程序在每个 platform 上编译不同,因此编译后的文件无法在所有 operating system 上运行,除非重新编译。 |
| 它是 portable 的。作为 platform independent,Java 代码可以原样传输到任何机器上,而无需任何 platform specific 修改。 在 Windows 机器上编写的 Java 代码可以在 Unix 机器上以相同方式运行,无需任何修改。 | 它是 有限程度 portable 的。 |
| 它是 解释型语言。 | 它是 编译型语言。 |
| Java 只支持 single inheritance。Multiple inheritance 可以使用 interfaces 实现(仅部分支持)。 一个 class 只能 extend 一个 class,但是一个 interface 可以 extend multiple inheritance。 Multiple inheritance 可能导致 ambiguous 结果。由于 Java 不支持 virtual 关键字,因此不支持 multiple inheritance。 |
它支持 single 和 multiple inheritance。 使用 virtual 关键字,可以解决 ambiguous 引用。 |
| Java 对 pointers 提供 有限支持。Pointers 作为复杂功能,Java 避免使用它们。 Java 提供了 reference 概念来指向对象或确切地说它们的地址。 | C++ 支持 pointer 操作。开发人员可以使用 pointers 执行复杂操作,编写优化的基于内存的代码。但它相当复杂,需要强大的编程技能来掌握。 |
| Java 支持 thread 操作。Java 默认支持 multithreading。它允许 concurrent programming 以提高效率并减少所需时间。 | 它在设计上 不支持 threads。可以使用 third party threading libraries 来实现。 |
| Java 不支持 global scope。Java 是一种严格的 object oriented 语言,不提供 global scope。不过,使用 packages,它支持跨 package scope。 | C++ 支持 global scope 以及 namespace scope。 |
| Java 没有 goto 关键字。但可以使用 label 实现相同功能。break/continue 语句可以跳转到 labelled statement 位置。 | 它支持 goto 关键字。使用 goto 关键字,我们可以跳转到任何 labelled 位置。 |
| 它使用 garbage collector 自动执行对象管理。Garbage Collector 服务自动检测并释放空间。 | 它使用 "new" 和 "delete" 手动执行对象管理。开发人员必须采取措施确保内存正确分配/释放,以防止 memory leaks。 |
结论
Java 独立于 operating system,这使得它可以通过 JVM 在任何 OS 上运行。此外,它提供自动 memory management 和内置 multithreading,以确保安全性和易用性。它不包含像 pointers 这样的复杂特性,这提高了代码的安全性和可维护性。
另一方面,C++ 通过使用 pointers 和 manual memory management 提供了更大的灵活性。这反过来增加了复杂性。由于这个和其他原因,对于希望开发安全、可靠且 portable 软件的公司来说,Java 是最合适的选择。