Java 每日一刊(第一期):Java 的历史

news2024/11/9 14:50:01

文章目录

    • Java 的起源与诞生
    • Java 的早期发展(1995-2000)
    • Java 的转型与扩展(2000-2010)
    • Oracle 时代的 Java(2010-至今)
    • 本期小知识

Java 的起源与诞生

Java 的历史可以追溯到 20 世纪 90 年代,由 Sun Microsystems 的团队开发,最初作为一个名为“Green Project”的项目启动。

詹姆斯·高斯林(James Gosling) 是 Java 语言的核心设计者,他与团队的目标是为消费电子设备(如电视机顶盒)开发一种能够在不同硬件环境中运行的语言。

这个项目最初的产物是名为 Oak 的编程语言,但由于未能在消费电子市场取得成功,团队决定将其重新命名为 Java 并转向互联网领域。

Java 的跨平台能力是其核心竞争力之一。Java 引入了 “一次编写,随处运行” (Write Once, Run Anywhere,WORA)的概念,即通过 Java 虚拟机(JVM),Java 程序可以在任何支持 JVM 的设备上运行,这使得 Java 很快成为开发跨平台应用程序的首选。

Java 的早期发展(1995-2000)

1995 年,Sun Microsystems 正式发布了 Java 语言的第一个版本 JDK 1.0,它包含了基础的类库、API 和 Java 虚拟机。Java 最初的主要应用场景是在互联网应用开发中,特别是 Java Applets 的使用,使得开发者可以在浏览器中运行动态内容。然而,随着 JavaScript 的兴起和 Flash 技术的普及,Java Applets 的影响逐渐减弱。

与此同时,Java 在企业级应用开发中得到了广泛应用。1997 年,Java 1.1 发布,增强了基础语言特性并引入了 JavaBeans 和 JDBC(Java Database Connectivity) 等新功能,为企业级开发奠定了基础。随着 Java 的不断发展,Sun Microsystems 推出了 Java 2 平台,并分为三个版本:

  • Java 2 Standard Edition (J2SE):用于桌面应用和通用编程。
  • Java 2 Enterprise Edition (J2EE):专为企业级分布式系统和网络应用设计。
  • Java 2 Micro Edition (J2ME):用于移动设备和嵌入式系统。

Java 在这一时期迅速成为企业应用开发的核心技术,特别是在银行、保险、电信等需要可靠分布式系统的行业。

Java 的转型与扩展(2000-2010)

进入 21 世纪,Java 语言不断成熟并扩展其应用范围。J2EE 的发布标志着 Java 在企业领域的统治地位,它为开发大型分布式系统、Web 应用和服务提供了完备的框架和工具,如 Servlets、JavaServer Pages (JSP)、Enterprise JavaBeans (EJB)。

Java 5(2004 年发布) 是 Java 语言发展中的重要里程碑,引入了多个现代编程语言特性:

  • 泛型(Generics):增强了类型安全性,使得代码更灵活、可复用。
  • 枚举类型(Enum):允许定义类型安全的常量集。
  • 自动装箱/拆箱:简化了基本类型和对象类型之间的转换。
  • 增强的 for 循环:简化了集合和数组的遍历操作。
  • 并发库:大大简化了多线程编程,提高了并发处理的效率。

这些特性让 Java 在开发大型企业应用程序时变得更加高效和易于维护。与此同时,Java 6(2006 年)和 Java 7(2011 年)进一步优化了语言的性能,并为开发者提供了更好的工具支持。

Oracle 时代的 Java(2010-至今)

2010 年,Oracle 公司收购了 Sun Microsystems,接管了 Java 语言的发展。Oracle 承诺继续推动 Java 的发展,并确保其稳定性与企业应用的兼容性。与此同时,Java 语言的发布周期也发生了重大变化。

Java 8(2014 年)被认为是 Java 语言现代化的重要转折点,许多新特性使得 Java 更加适合现代软件开发:

  • Lambda 表达式:引入了函数式编程的概念,简化了代码编写,并提高了代码的可读性。
  • Stream API:提供了高效的数据处理能力,使得开发者可以轻松地处理数据集合和流式操作。
  • 默认方法:允许在接口中提供默认实现,增强了接口的扩展能力。

Java 8 的发布极大地提升了语言的表达能力,也让 Java 在面对新兴编程范式(如函数式编程)时保持了竞争力。

为了加快新特性的发布,自 Java 9(2017 年) 开始,Oracle 采用了每六个月发布一个新版本的策略,这使得 Java 语言的演进速度大幅加快。Java 9 引入了 模块化系统(Project Jigsaw),通过模块化的设计提高了大型项目的结构化管理和安全性。Java 10(2018 年)引入了局部变量类型推断功能,简化了代码编写。

Java 11(2018 年)成为了长期支持(LTS)版本,之后的 Java 17(2021 年)也成为了新的 LTS 版本,增强了语言的封装性、垃圾收集器以及对现代云原生应用的支持。

本期小知识

Java 的发明者 James Gosling 和他的团队在 1990 年开发这门语言时,最初将其命名为 “Oak”(橡树),因为 Gosling 的办公室外面有一棵橡树。然而,当他们准备发布时发现这个名字已经被别的公司注册了,因此他们改名为 Java,这个名字来自开发团队常喝的一种咖啡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2119483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构(初阶)】——二叉树

【数据结构】——二叉树 文章目录 【数据结构】——二叉树前言1. 树的概念及结构1.1 树的概念1.2 树的结构 2. 二叉树的概念及结构2.1 二叉树的概念2.2 二叉树的结构2.3 二叉树的性质 3. 二叉树顺序结构及概念3.1 二叉树的顺序结构3.2 堆的概念及结构3.3 堆的实现3.3.1 堆的基本…

【C++ Qt day9】

2、将day1做的登录界面升级优化【资源文件的添加】 3、 使用手动连接,将登录框中的取消按钮使用第2种方式的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上…

黑马点评16——多级缓存-JVM进程缓存

文章目录 什么是多级缓存导入商品案例初识Caffeine实现进程缓存 什么是多级缓存 但是现在的nginx的压力太大了,所以nginx也要部署成集群 当然我们的redis、tomcat都可以部署成集群 导入商品案例 我们在docker中开启了一个mysql的数据库,里面配置了一个…

C和指针:高级指针话题

进一步探讨指向指针的指针 int i; int *pi; int **ppi; 这些声明在内存中创建了下列变量。如果它们是自动变量,无法猜测它们的初始值。 二级指针指向一级指针 ppiπ *ppi&i; ia; *pia; **ppia; 为什么要使用指针? 因为函数传参使用值传递不会…

[C#学习笔记]接口的特性与用法

视频地址&#xff1a;一期视频看透C#接口的全部特性及用法_哔哩哔哩_bilibili 强烈推荐学习C#和WPF的朋友关注此UP&#xff0c;知识点巨多&#xff0c;讲解透彻&#xff01; 一、总览 public interface IOverall {/// <summary>/// 最普通的方法/// </summary>v…

[数据集][目标检测]打电话检测数据集VOC+YOLO格式8985张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8985 标注数量(xml文件个数)&#xff1a;8985 标注数量(txt文件个数)&#xff1a;8985 标注…

【C++】C++入门基础,详细介绍命名空间,缺省参数,函数重载,引用,内联函数等

目录 1. 命名空间 1.1 使用命名空间的目的 1.2 命名空间定义 1.3 命名空间使用 2. 缺省参数 2.1 缺省参数概念 2.2 缺省参数分类 2.3 实际案例 2.4 注意事项 3. 函数重载 3.1 函数重载概念 3.2 函数重载原理 4. 引用 4.1 引用的概念 4.2 引用的特性 4.3 使用…

JavaScript案例---求质数

n等于19&#xff0c;是质数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wid…

OpenAI Gymnasium, are there any libraries with algorithms supporting it?

题意&#xff1a;对于OpenAI Gym&#xff0c;是否有支持它的算法库&#xff1f; 问题背景&#xff1a; OpenAI has released a new library called Gymnasium which is supposed to replace the Gym library. There are many libraries with implamentations of RL algorithms…

机械学习—零基础学习日志(Python做数据分析02)

现在开始使用Python尝试做数据分析。具体参考的网址链接放在了文章末尾。 引言 我通过学习《利用Python进行数据分析》这本书来尝试使用Python做数据分析。书里让下载&#xff0c;anaconda&#xff0c;使用Jupyter来写代码&#xff0c;只是下载一个anaconda的确有点费时间&am…

RabbitMQ 04 集群,用于提高系统性能

01.背景 02.单个节点的MQ会持久化的记录什么数据 03.集群情况下的MQ会持久化的记录什么数据 04.集群中的队列 单个节点的队列&#xff1a; 集群的队列&#xff1a; 05. 两个原因&#xff1a; 这样做带来的好处&#xff1a; 05.集群的交换机 交换机的本质 交换机在集…

Unity TextMeshPro 设置竖排

默认竖排是这样的 但是我们要的竖排效果并不是这样我们要是竖排连续的根据文本限制来进行换行 第一步我们先设置文本的旋转Z轴为90如下图 然后我们给文本加一个Tag <rotate270> 如下图 但是这个效果还是不是我们想要的效果我们可以使用TexeMeshPro提供的一个选项EnableR…

97.游戏的启动与多开-共享内存多开检测

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;96.游戏的启动与多开-窗口多开检测与破解 以 96.游戏的启动与多开-窗口多开检测与破解 …

Word文档的读取(1)

读取一个班的答题卡 解决方法&#xff1a; 导入os模块后&#xff0c;将乔老师的文件夹路径 /Users/qiao/answerKey 赋值给变量allKeyPath。使用os.listdir()函数获取该路径下所有的答题卡名称列表&#xff0c;并赋值给变量allItems。最后使用for循环遍历所有答题卡&#xff0c…

【知识小妙招来喽!】文件防泄密措施有哪些?这6个有效方法防止企业员工泄密!

在信息高度发达的时代&#xff0c;企业数据的安全性和保密性成为了企业运营中不可忽视的重要环节。 一旦敏感文件被泄露&#xff0c;不仅可能导致商业机密被窃取&#xff0c;还可能给企业带来重大的经济损失和声誉损害。 因此&#xff0c;采取一系列有效的文件防泄密措施&…

spring security 中的异常

一、简介 Spring Security 中异常主要分为两大类: 1、AuthenticationException: 认证异常 2、AccessDeniedException: 授权异常 AuthenticationEntryPoint 该类用来统一处理 AuthenticationException 异常 AccessDeniedHandler 该类用来统一处理 AccessDeniedException 异常…

HarmonyOS笔记

HarmonyOS简介 HarmonyOS是新一代的智能终端操作系统&#xff0c;为不同设备的智能化、互联与协同提供了统一的语言&#xff0c;为用户带来简捷&#xff0c;流畅&#xff0c;连续&#xff0c;安全可靠的全场景交互体验。 HarmonyOS结合移动生态发展的趋势&#xff0c;提出了三大…

keepalive和nginx高可用集群

keepalived 和 nginx 高可用集群搭建 主备模式 zyj86主机和zyj87主机安装nginx和keepalived yum install nginx keepalived -y systemctl enable --now nginx.service keepalived.service主调度器配置 编辑zyj86主机&#xff08;主&#xff09;配置文件 vi /etc/keepalived…

Java类和对象(2)(重点*)

封装&#xff1a; 面向对象程序三大特性&#xff1a;封装、继承、多态。而类和对象阶段&#xff0c;主要研究的就是封装特性。何为封装呢&#xff1f;简单来说就是套壳屏蔽细节 。 封装&#xff1a;将数据和操作数据的方法进行有机结合&#xff0c;隐藏对象的属性和实现细节&a…

为什么用Redis?说说Redis的线程模型

使用Redis存储相比直接使用Java内存的Map有以下几个优势&#xff1a; 持久化&#xff1a; Redis支持数据持久化&#xff0c;即使发生服务器重启或意外宕机&#xff0c;数据仍然可以被恢复。而使用Java内存的Map&#xff0c;当应用程序关闭或重启时&#xff0c;数据将会丢失。…