Java 简明教程

Java vs C++

Java 是一种通用、高级编程语言。Java 用于 Web 开发、机器学习和其他尖端的软件开发。Java 编程语言最初是由 Sun Microsystems 开发的,由 James Gosling 发起,并于 1995 年作为 Sun Microsystems 的 Java 平台(Java 1.0 [J2SE])的核心组件发布。

C 是一种中级、区分大小写、面向对象编程语言。Bjarne Stroustrup 在贝尔实验室创建了 C。C 是一种独立于平台的编程语言,可用于 Windows、Mac OS 和 Linux。C 接近硬件,允许低级编程。这为开发者提供了对内存的控制、提高的性能和可靠的软件。

请阅读本文,以了解 C++ 和 Java 的概述,以及这两种编程语言之间的不同之处。

What is Java?

Java Standard Edition 的最新版本是 Java SE 21。随着 Java 的进步及其广泛普及,已构建多种配置以适应各种类型的平台。例如:J2EE 用于企业应用程序,J2ME 用于移动应用程序。

新 J2 版本分别更名为 Java SE、Java EE 和 Java ME。Java 有保证 Write Once, Run Anywhere.

Features of Java

Java 是 −

  1. Object Oriented − 在 Java 中,一切都是 Object 。Java 可以轻松扩展,因为它基于对象模型。

  2. Platform Independent − 与包括 C 和 C++ 在内的许多其他编程语言不同,当 Java 编译时,它不会编译到特定于平台的机器,而是编译到独立于平台的字节码。此字节码通过网络进行分发,并由无论在其上运行的任何平台上的 Java Virtual Machine (JVM) 进行解释。

  3. Simple - Java 旨在轻松易学。如果你理解了基本 concept of OOP Java ,就可以轻松掌握。

  4. Secure − Java 的安全功能使其能够开发无病毒、无篡改的系统。认证技术基于公钥加密。

  5. Architecture-neutral - Java compiler 生成一种与体系结构无关的对象文件格式,可使编译代码在许多处理器上执行,即使存在 Java 运行时系统。

  6. Portable − 由于是架构中立的,并且没有规范中依赖实现的方面,Java 是可移植的。Java 中的编译器是用 ANSI C 编写的,具有明确的可移植性边界,它是 POSIX 的一个子集。

  7. Robust − Java 努力通过主要强调编译时错误检查和运行时检查来消除可能出错的情况。

  8. Multithreaded - 使用 Java 的 multithreaded feature 可以编写能够同时执行许多任务的程序。此设计功能允许开发者构建能够平稳运行的交互式应用程序。

  9. Interpreted − Java 字节码被即时翻译成本机机器指令,且不会存储在任何地方。由于链接是一个增量轻量级过程,开发过程更加快速且分析。

  10. High Performance − Java 通过使用即时编译器实现高性能。

  11. Distributed − Java 是为互联网的分布式环境而设计的。

  12. Dynamic - 与 C 或 C++ 相比,Java 被认为更动态,因为它旨在适应不断变化的环境。Java 程序可以携带大量运行时信息,该信息可用于验证和解决对运行时对象进行的访问。

Java Example

看看以下简单的 Java 程序 −

package com.tutorialspoint;

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 类对象从由 System.in 对象表示的控制台中读取用户输入。System.out 对象方法 println() 用于打印接收到的值。

执行后,此 Java 代码将生成以下输出 −

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

What is C++?

C 是一种静态类型、已编译、多范式、通用编程语言,具有陡峭的学习曲线。视频游戏、桌面应用程序和嵌入式系统广泛使用它。C 与 C 非常兼容,它几乎可以构建所有 C 源代码,而无需进行任何更改。面向对象编程使 C++ 成为比 C 结构更好、更安全的语言。

Features of C++

让我们看看 C++ 的一些特性及其受欢迎的原因。

  1. Middle-level language − 因为它既可用于系统开发,也可用于大型消费类应用程序(如媒体播放器、Photoshop、游戏引擎等),所以它是一种中级语言。

  2. Execution Speed − C++ 代码运行速度快。因为它已编译并广泛使用过程。垃圾回收、动态类型和其他现代特性会阻碍程序执行。

  3. Object-oriented language − 面向对象编程灵活且易于管理。大型应用程序是可能的。不断增加的代码使过程代码更难处理。C++ 比 C 具有关键优势。

  4. Extensive Library Support − C++ 拥有大量库。支持第三方库以进行快速开发。

C++ Example

让我们通过下面编写的示例了解 C++ 的语法。

#include
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”的输入,并在控制台上显示数据。

执行后,它将生成以下 output

Enter The value for variable a
10
Enter The value for variable b
20
The value of a is 10 and 20

Difference Between Java and C++

Java 和 C++ 都是最流行的编程语言。它们都有各自的优点和缺点。在本教程中,我们将仔细了解它们的特征,这些特征使它们彼此区分开来。

Sr.No.

Criteria

Java

C++

1

Developed by

Java 由 Sun Microsystems 的 James Gosling 开发。最初,它被设计用于嵌入式系统、机顶盒、电视机等。后来,它成为基于互联网的应用程序开发的首选语言

C 语言是由 Bjarne Stroustrup 在贝尔实验室开发的,作为 C 语言的扩展。它同时支持高级和低级机器代码访问。C 主要用于开发系统软件、编译器等。

2

Influenced by

它受到 Ada 83、Pascal、C++ 和 C# 的影响。

它受到 Ada、ALGOL 68、C、ML、Simula 和 Smalltalk 的影响。

3

Dependency on Architecture

Java 字节码可以运行在任何操作系统上。字节码针对 JVM。JVM 或 Java 虚拟机随后解释字节码并运行底层机器特定代码。因此,无需更改 Java 代码以便在不同机器上运行。

它不能在每个操作系统上运行,因为库在不同系统上是不同的。

4

Platform independence

它可以在任何操作系统上运行。Java 代码与平台无关。不需要平台特定代码。int 和 long 的大小在所有平台上保持不变。

它在不同平台上编译方式不同,不能在任何操作系统上运行。

5

Portablity

它具有可移植性。由于与平台无关,因此 Java 代码可以原样传输到任何机器上,无需进行任何特定于平台的修改。在 Windows 机器上编写的 Java 代码可以以相同方式在 Unix 机器上运行,无需进行任何修改。

It isn’t portable.

6

Interpreted/Compiled

它是一种解释型语言。

它是一种编译型语言。

7

Memory management

内存管理自动完成。Java 提供垃圾回收器服务,该服务在不再需要某个对象后自动释放内存。

内存管理需要手动完成。

8

virtual Keyword

它没有“virtual”关键字。

它有“virtual”关键字。

9

Multiple Inheritance support

它仅支持单继承。可以使用接口(仅部分)实现多重继承。一个类只能扩展一个类。尽管接口可以扩展多重继承。多重继承可能导致模棱两可的结果。由于 Java 中不支持虚拟关键字,因此不支持多重继承。

它支持单继承和多重继承。使用虚拟关键字,可以解析模棱两可的引用。

10

operator overloading support

它不支持运算符重载。Java 仅支持方法重载。运算符重载被认为会增加基础语言的复杂性,因此没有实现它以保持语言的简单性。

它支持运算符重载。在 C++ 中,我们可以重载方法和运算符。

11

pointers

它对指针提供有限的支持。Java 避免使用指针,因为指针是一种复杂的功能。它提供了指向对象或精确地址的引用概念。

它支持指针操作。开发人员可以执行复杂操作,可以使用指针编写基于优化内存的代码。但它相当复杂,需要强大的编程技能才能掌握它们。

12

低级机器代码访问

它们具有高级功能。Java是一个与平台无关的语言,Java的编译代码作为字节码适用于JVM,此JVM将代码进一步转换为低级代码。因此,使用Java时,开发人员无法编写低级机器代码。这就是Java主要用于应用程序开发的原因。

它们具有低级功能。由于C++支持低级机器代码。它主要用于编写系统软件、编译器等。

13

Native libraries access

它不支持直接调用本机库。Java并未设计为使用低级机器代码,且不支持本机调用。但我们可使用第三方库配置本机调用。

它支持直接系统库调用。

14

documentation comment

它支持源代码中的 documentation comment (/**.. */)。Javadoc 工具可以从源代码中读取文档注释,并基于注释生成基于 HTML 的 Java 文档。

它不支持源代码的文档注释。

15

Multithreading

它支持线程操作。Java默认支持多线程。它允许并行编程,以提高效率,缩短所需时间

它在设计中不支持线程。可以通过使用第三方线程库来实现。

16

Console Input

它使用 'System' class (即 System.in)进行输入。System.in 类可用于在控制台中获取用户的输入。

它使用 'cin' 进行输入操作。cin 允许用户在控制台中输入值。

17

Console Output

它使用System.out作为输出。System.out.println()方法会将所需值打印到系统的控制台上。

它使用 'cout' 进行输出操作。cout 在系统控制台中打印所需的值。

19

global support

它不支持全局作用域。Java是一种严格的面向对象语言,且无全局作用域。尽管它使用包支持跨包作用域。

它支持全局作用域和名称空间作用域。

20

struct/union support

它不支持结构和共用体。

它支持结构和共用体。

21

goto keyword

它没有“goto”关键字。但可以使用标签实现相同的功能。break/continue语句可以跳转到带标签的语句位置。

它支持 'goto' keyword 。使用 goto 关键字,我们可以跳转到任何带标记的位置。

22

pass by value/reference

它只支持按值传递方法。即使对象引用也会技术性地按值传递给某个方法。

它支持按值传递和按引用传递方法。按引用传递情况下需要指针或 & 符号。

23

Memory Management

使用垃圾回收器自动执行对象管理。开发人员不需要为对象分配内存或在对象不再使用时取消分配对象。垃圾回收器服务会自动检测并释放空间。由于存在垃圾回收器服务,所以 Java 中出现内存泄漏的可能性非常小。

使用“new”和“delete”手动执行对象管理。开发人员必须采取措施以确保正确分配/取消分配内存,以防止内存泄漏。