杰瑞科技汇

Java是语言改进还是重新设计的产物?

Java 主要是由 C++ 语言改进并重新设计的。

Java是语言改进还是重新设计的产物?-图1
(图片来源网络,侵删)

更准确地说,Java 的设计思想主要来源于 C++,但旨在解决 C++ 中一些复杂、难以管理和不安全的特性。

为什么是 C++?

Java 的创始人詹姆斯·高斯林(James Gosling)和他的团队在 Sun Microsystems 最初开发这个项目时(最初名为 "Oak"),其目标就是创造一种能够运行在机顶盒等小型设备上的、简单、健壮且跨平台的编程语言。

他们选择以 C++ 为蓝本,主要有以下几个原因:

  1. 熟悉度高:C++ 是当时非常流行且强大的系统编程语言,许多程序员都熟悉 C++ 的语法和概念,以 C++ 为基础进行改进,可以大大降低新语言的学习门槛,更容易被开发者接受。
  2. 性能考虑:C++ 的前身是 C 语言,以其高性能著称,Java 也希望具备接近 C/C++ 的执行效率,因此保留了 C++ 中许多底层操作的能力(如算术运算、指针操作 - 但在 Java 中以更安全的形式实现)。

Java 对 C++ 的关键改进和重新设计

Java 并非简单地简化 C++,而是进行了一次深刻的、面向重新设计的改进,它去掉了 C++ 中最复杂、最容易出错的部分,并增加了一些革命性的特性。

Java是语言改进还是重新设计的产物?-图2
(图片来源网络,侵删)

以下是 Java 从 C++ 中移除或改进的核心特性:

特性 C++ Java 改进目的
内存管理 手动管理:程序员需要使用 newdelete 来分配和释放内存,容易导致内存泄漏或悬垂指针。 自动垃圾回收:JVM 会自动跟踪和回收不再使用的对象内存。 简化开发,消除内存泄漏,让开发者专注于业务逻辑。
指针 直接内存访问:功能强大但极其危险,可以轻易访问非法内存,导致程序崩溃和安全漏洞。 没有指针:用引用 代替,引用指向对象,但不能进行指针运算,不能直接访问内存地址。 提高安全性,防止非法内存访问,增强程序的健壮性。
多重继承 支持:一个类可以继承多个父类,这会导致“菱形继承”问题,使得继承关系复杂、混乱,并产生二义性。 不支持类多重继承:一个类只能继承一个父类,但通过接口 实现了多重继承的效果。 简化继承模型,避免复杂的继承关系和冲突,使代码结构更清晰。
头文件和预处理 依赖头文件:需要 #include 来引入声明,依赖关系复杂,编译速度慢。 无头文件:类的声明和实现都在一个 .java 文件中。 简化开发流程,提高编译效率。
全局变量和函数 支持:可以在命名空间外定义全局变量和函数,破坏了封装性。 不支持:所有代码都必须定义在类中。 强制面向对象,保证所有操作都在类的上下文中进行,增强封装性。
数据类型 基本类型和类类型分离intInteger 是两种不同的东西,转换时需要手动装箱/拆箱。 基本类型和包装类:虽然也有 intInteger,但在 Java 5 之后引入了自动装箱/拆箱机制,简化了转换。 统一类型系统,使基本类型也能以对象的方式使用(如在集合中),简化了代码。
平台依赖性 编译后生成机器码,依赖于特定的操作系统和CPU架构。 “一次编写,到处运行”:编译成与平台无关的字节码,由 JVM 解释或即时编译为本地机器码执行。 实现跨平台,这是 Java 最核心的设计目标之一。

Java 的诞生可以看作是 一次对 C++ 的扬弃

  • 继承:它继承了 C++ 的语法风格面向对象的核心思想,让 C++ 程序员能快速上手。
  • 扬弃:它抛弃了 C++ 中被认为是“罪恶之源”的复杂特性(如指针、手动内存管理、多重继承),以换取更高的安全性、健壮性和可移植性

最准确的答案是:Java 是从 C++ 语言改进重新设计的

分享:
扫描分享到社交APP
上一篇
下一篇