”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Java 编程语言的历史

Java 编程语言的历史

发布于2024-11-08
浏览:655

The History of Java Programming Language

Java 是世界上最流行的编程语言之一,以其多功能性、可靠性和效率而闻名。它多年来的发展和成长塑造了我们今天使用的大部分技术。回顾一下 Java 的历史。

1。 Java 的起源
Java 由 James Gosling 与 Mike Sheridan 和 Patrick Naughton 一起开发,是 Sun Microsystems 绿色项目的一部分。该语言最初是为交互式电视而设计的,但它很快就演变成一种通用语言。

1991: Java 的开发以代号“Oak”开始,其灵感来自于 Gosling 办公室外的一棵橡树。后来,由于开发者流行的一种咖啡,该名称被更改为Java。

1995年:Java由Sun Microsystems正式发布。其“一次编写,随处运行”功能迅速流行起来,因为它能够在任何具有 Java 虚拟机 (JVM) 的设备上运行,使其独立于平台。

2. Java 开发的关键里程碑
1996 年:Java 1.0 发布
Java的第一个正式版本发布,其中包括核心库、JVM和基本API。重点是 Web 浏览器的小程序开发,导致 Java 在基于 Web 的应用程序中得到采用。

1998:Java 2 (J2SE)

Java 2(也称为 J2SE)的发布是一个重要的里程碑。它引入了 Swing 图形用户界面 (GUI) 工具包、集合框架并提高了性能。 Java也开始分为三个平台:
Java SE(标准版):适用于桌面应用程序。
Java EE(企业版):适用于企业应用程序。
Java ME(微型版):适用于移动和嵌入式设备。

2004:Java 5(老虎)
Java 5 引入了重要的语言增强功能,包括:
泛型
元数据(注释)
枚举
Varargs(变量参数)
增强的 for 循环
这些功能提高了代码质量和开发人员的工作效率,使 Java 更加强大和现代。

2009 年:Oracle 收购 Sun Microsystems

Oracle 公司于 2009 年收购了 Sun Microsystems,获得了对 Java 的控制权。这标志着 Java 发展进入了一个新阶段,Oracle 接管了该语言和平台的管理权。

2014:Java 8

Java 8 是另一个主要版本,通过引入 Lambda 表达式、Streams API 和 java.time 包,将函数式编程引入 Java,以实现更好的日期和时间处理。此版本改进了 Java 的多功能性和性能,特别是对于并行处理和函数式操作。

2017:OpenJDK
Oracle 宣布通过 OpenJDK 项目将 Java 转向开源模型,提供 Java 平台的免费开源实现。此外,Java 的发布周期从每隔几年发布一次主要版本改为更快的六个月发布节奏。

2018:Java 11
作为长期支持 (LTS) 版本,Java 11 引入了许多增强功能,包括 lambda 参数的本地变量语法、新 API 以及删除 Java EE 模块。

2021:Java 17

下一个长期支持版本 Java 17 引入了新的语言功能,例如密封类、模式匹配和记录增强功能,进一步实现了语言的现代化。

3.今日 Java
Java 继续广泛应用于 Web 应用程序、企业软件、移动应用程序、云计算和大数据技术。它通过 Spring Boot 和 Java EE 为 Android 和企业服务器等主要平台提供支持。凭借频繁的更新和强大的社区支持,Java 仍然是软件开发行业的领先语言。

4。为什么 Java 仍然重要

平台独立性:Java 的“一次编写,随处运行”理念使其几乎可以在任何设备上运行,从而适用于广泛的应用程序。

强大的生态系统:Java 拥有庞大的框架生态系统(例如 Spring、Hibernate)、工具和库,使开发变得更容易、更快。

-安全性:Java 的安全功能,例如字节码验证和运行时检查,使其成为安全应用程序的值得信赖的选择。

向后兼容性:Java 保持出色的向后兼容性,确保旧版本编写的代码在新版本中继续工作。

结论

Java 从 20 世纪 90 年代初问世到目前的突出地位,其丰富的历史反映了它的适应性和持久的相关性。随着技术的发展,Java 继续保持在编程世界的最前沿,为从企业级系统到移动应用程序和云计算的一切提供支持。

版本声明 本文转载于:https://dev.to/selvapa/the-history-of-java-programming-language-50eg?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-12-29
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-12-29
  • HTML 格式标签
    HTML 格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2024-12-29
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-12-29
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-12-29
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-12-29
  • 插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入记录时如何解决“一般错误:2006 MySQL 服务器已消失”介绍:将数据插入 MySQL 数据库有时会导致错误“一般错误:2006 MySQL 服务器已消失”。当与服务器的连接丢失时会出现此错误,通常是由于 MySQL 配置中的两个变量之一所致。解决方案:解决此错误的关键是调整wait_tim...
    编程 发布于2024-12-29
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为的主要场景bool:语句:if、whi...
    编程 发布于2024-12-29
  • 尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    解决 PHP 中的 POST 请求故障在提供的代码片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"检查 $_POST数组:表单提交后使用 var_dump 检查 $_POST 数...
    编程 发布于2024-12-29
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-12-29
  • 如何在 React 中有条件地应用类属性?
    如何在 React 中有条件地应用类属性?
    在 React 中有条件地应用类属性在 React 中,根据从父组件传递的 props 来显示或隐藏元素是很常见的。为此,您可以有条件地应用 CSS 类。然而,当使用语法 {this.props.condition ? 'show' : 'hidden'} 直接在字符...
    编程 发布于2024-12-28
  • 如何在Java中执行系统命令并与其他应用程序交互?
    如何在Java中执行系统命令并与其他应用程序交互?
    Java 中运行进程在 Java 中,启动进程的能力是执行系统命令和与其他应用程序交互的关键功能。为了启动一个进程,Java提供了一个相当于.Net System.Diagnostics.Process.Start方法。解决方案:获取本地路径对于执行至关重要Java 中的进程。幸运的是,Java 的...
    编程 发布于2024-12-28
  • 如何在 C++ 中创建多行字符串文字?
    如何在 C++ 中创建多行字符串文字?
    C 中的多行字符串文字 在 C 中,定义多行字符串文字并不像 Perl 等其他语言那样简单。但是,您可以使用一些技术来实现此目的:连接字符串文字一种方法是利用 C 中相邻字符串文字由编译器连接的事实。通过将字符串分成多行,您可以创建单个多行字符串:const char *text = "...
    编程 发布于2024-12-28
  • 如何准确地透视具有不同记录的数据以避免丢失信息?
    如何准确地透视具有不同记录的数据以避免丢失信息?
    有效地透视不同记录透视查询在将数据转换为表格格式、实现轻松数据分析方面发挥着至关重要的作用。但是,在处理不同记录时,数据透视查询的默认行为可能会出现问题。问题:忽略不同值考虑下表:------------------------------------------------------ | Id ...
    编程 发布于2024-12-27
  • 为什么 C 和 C++ 忽略函数签名中的数组长度?
    为什么 C 和 C++ 忽略函数签名中的数组长度?
    将数组传递给 C 和 C 中的函数 问题:为什么 C 和C 编译器允许在函数签名中声明数组长度,例如 int dis(char a[1])(当它们不允许时)强制执行?答案:C 和 C 中用于将数组传递给函数的语法是历史上的奇怪现象,它允许将指针传递给第一个元素详细说明:在 C 和 C 中,数组不是通...
    编程 发布于2024-12-26

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3