学习 Java 语言,你必须知道的 Java 简史

2024-08-29 11:32

本文主要是介绍学习 Java 语言,你必须知道的 Java 简史,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是蜗牛互联网的第 92 期原创。

作者 | 白色蜗牛

来源 | 蜗牛互联网(ID: woniu_internet)

转载请联系授权(微信ID: 919201148)

阅读本文你将收获:

为什么要学习 Java

Java 这门语言如今是互联网行业炙手可热的编程语言,像阿里、美团这些大厂,技术体系都是建立在 Java 之上。这些大厂又是很多新兴互联网企业的技术风向标,因此 Java 使用范围相当的广,对 Java 程序员的需求量就相当的大。

Java 不仅仅是一杯热腾腾的咖啡,还可以是一个靠得住的饭碗!

蜗牛从大学开始就接触 Java,工作之后也一直是使用 Java 这门程序设计语言作为编程首选。希望结合自己的知识体系和实践经验,产出 Java 学习的一系列教程,能够帮助到对 Java 感兴趣或者有志于从事 Java 程序员这个岗位的同学。

学习一个东西,首先要知道它是什么,基于什么样的背景下出现的,后续又是如何演变的。本文就简要介绍下 Java 的历史。

计算机系统层次与编程语言进化史

Java 是一种编程语言,和其他编程语言一样,它解决了人与计算机之间交流和沟通的问题,程序员这个特殊人群能编写,计算机能识别,从而能够设计出计算机的功能,便利人们的工作和生活。

那么 Java 是怎么出现的呢?都有其他编程语言了,为什么还需要它?

编程语言既然是运行在计算机之上的,我们首先看下计算机系统层次与编程语言的进化史。

早期计算机系统是用机器语言进行编程,机器语言也就被称为第一代程序设计语言(First Generation Programing Language, 1GL)

机器语言简单讲就是由二进制数 0 和 1 组成的一串指令。众多指令构成的指令集,就可以操控计算机硬件。

但如果让你只用 0 和 1 来设计程序,你肯定头大,因为机器语言的可读性,容错性和便捷性真的是太差了!

因此后期的计算机系统用一些容易理解和记忆的字母或单词来代替一个特定的指令,比如:用「ADD」代表数字逻辑上的加减,这就是第二代程序设计语言——汇编语言

汇编语言需要转换成机器指令,操作系统就提供了汇编语言与机器交互的界面。操作系统将指令集体系结构进行封装,抽象成被上层用户使用的接口,包括用户界面和底层服务。

如果学习过汇编语言的同学会知道,汇编语言是一种低级语言,仍然要和计算机硬件直接打交道,比如它还是要调用存储器存储数据。

这就意味着汇编语言不仅编写复杂易出错,它的可移植性也很差!我换一个有点差异的计算机硬件,这个应用程序就会挂。

为了解决这个问题,现代的计算机系统就支持了高级语言。首先出现的是第三代程序设计语言——过程式高级语言,编码时需要描述实现过程,即「如何做」,像 C 语言这种。

随着过程式高级语言的广泛使用,越来越多的人发现,他们其实不关心问题的解法和执行过程,他们只关心自己的输入记录以及最终的输出结果,其它工作希望都由系统来完成。

基于这样的思路,后来就出现了第四代程序设计语言——非过程式高级语言,编码时只需说明「做什么」,不需要描述具体的算法实现细节,像 Java 语言这种。

Java 萌芽期

Java 起初不叫 Java,它的出现也不是必然。

在 1990 年年末,美国一家叫 Sun 的公司着手研发嵌入式系统用于家电领域。当时安排 James Gosling 领导研发,内部把这个项目命名为 「Green 计划」,这个计划的目标是为下一代智能家电(电视机、微波炉、电话)编写通用的控制系统。

当时比较常用的编程语言是 C++,但 C++ 其实不太好用。第一,C++ 复杂,容易造成开发者误用,第二,C++ 缺少垃圾回收系统、可移植性、分布式和多线程等功能。

于是,Sun 首席科学家 Bill Joy 就提议开发新语言,在 C++ 的基础上,开发一种面向对象的环境。

James Gosling 就投入研发全新的语言,新的语言需要名字来展示生命力,这时 James Gosling 看到了办公室外的橡树,就把新语言命名为:Oak

1992 年夏天,Green 计划完成 Oak 程序设计语言、类库以及 Green 操作系统的研发。

1992 年 11 月,Green 计划转化成 Sun 的全资子公司——FirstPerson 有限公司,准备大干一场。

但当他们拿这个产品对外进行商业合作时,却屡屡碰壁。有线电视业界觉得 FirstPerson 平台给了用户过多的控制权,拒绝同 FirstPerson 合作。

FirstPerson 意识到自己在电视工业领域没有前景,于是把公司并回到 Sun。

随着互联网和浏览器的出现,James Gosling 团队敏锐的意识到,互联网在向高度远程互动的方向上演变。

这个方向正是他们在做有线电视网中看到的,因此他们决定改变努力的目标,将 Green 计划中的技术应用到万维网上。

1994 年秋,团队完成第一个 Oak 语言的网页浏览器:WebRunner,并获得高层的一致好评。

Java 取名那些事儿

由于 Oak 商标被一家显卡制造商注册,于是将 Oak 更名为 Java。Java 得名于印度尼西亚爪哇岛,这个地方因盛产咖啡而闻名。

Java 语言体系里也有很多和咖啡相关的东西。

比如 Java 源代码编译出的二进制文件 (.class 文件),如果你用十六进制编辑器打开,会发现最前面的 32 位显示为 CA FE BA BE,也就是词组 CAFE BABE(咖啡屋宝贝)。

以下是我将 Demo.java 文件编译成 Demo.class 文件后,用网站工具看到的内容,感兴趣的同学可以亲自试下。

public class Demo{}

(附)文件十六进制查看网站:https://67tool.com/details/wjsljzck

再比如,Java 语言中的许多库类名称和咖啡有关,像 JavaBeans(咖啡豆)、NetBeans(网络豆)以及 ObjectBeans(对象豆)等等。SUN 和 JAVA 的标识也是一杯正冒着热气的咖啡。

Java 初创期

1995 年初,Sun 对外发布 Java 语言,并提供免费下载,放在互联网上向所有人公开。本次的 Java 发布版本为 JDK BETA

JDK 全称 Java Development ToolKit,指 Java 语言开发工具包。

同时对外发布可在网页中运行 Java 程序(也叫 Java Applet)的网页浏览器——WebRunner,并将其更名为 HotJava。

与此同时,如日中天的网景也决定让旗下的浏览器对 Java 进行支持。

随后的几个月,Java 引爆互联网,数万人访问 Sun 官网,下载 Java 语言。互联网上立即出现数不清的 Java Applet,演示着小动画、小游戏等。

为了方便开发者能够快速开发出复杂的应用程序,Sun 独立出一条 Java 业务线,专门开发 Java 技术。

1996 年 1 月,Sun 发布 JDK 1.0。这个版本集成了 Java 运行环境和开发工具。

1997 年 2 月,Sun 发布 JDK 1.1。这个版本增加 JDBC、反射等能力。

Java 的出现,让互联网的网页动了起来。但随着 Adobe 公司 Flash 的流行,这款无须任何编程语言知识,就能做出各种动画的软件,逐步侵蚀了 Java 在浏览器端的地位。

有了 Flash 还用 Java 干嘛?Java 存在的意义是什么?Java 定位的问题一直深深困扰着 Sun。

直到 1998 年 12 月,Sun 发布第二代 Java 企业平台,Java 版本为 JDK 1.2,这是 Java 第一个里程碑式的版本

该版本引入集合框架,Java 基础类库等能力,同时发布了 JSP/Servlet、EJB 等企业平台规范。

1999 年 6 月,Sun 发布 Java 的三个版本:J2SE、J2EE 和 J2ME。

  • J2SE(Java 2 Platform, Standard Edition):Java 的标准版,用于普通 PC 应用的开发,是 Java 技术的核心与基础,也是 J2ME 和 J2EE 编程基础。

  • J2EE(Java 2 Platform, Enterprise Edition):Java 的企业版,用于企业级应用开发。

  • J2ME(Java 2 Platform, Micro Edition):Java 的微型版,用于嵌入式设备及消费类电器的开发。

可以看到,Sun 已经很明确 Java 的定位了,就是向 PC 、企业和移动三个方向发展。

JDK 1.2 影响深远,Java 发生了很多革命性的变化,并且它的很多能力和规范沿用至今。至此,Sun 时代 Java 的初创期结束,进入了飞速发展的阶段。

Java 发展期

2000 年 5 月,J2SE 1.3 发布。该版本将 Hotspot 作为 Java 的默认虚拟机实现。

同期 Servlet 规范开始流行,伴随着互联网的兴起,同其他 MVC 框架,成为 Web1.0 的网红。

2002 年 2 月,J2SE 1.4 发布。该版本的 Java 已经相对成熟,它提供了完备的语言特性,像 NIO、正则表达式和 XML 处理器等。

与此同时,基于 Java 语言的开源框架:Struts、Hibernate、Spring 以及大量企业应用服务器比如 WebLogic、JBoss 等相继涌现,这让 Java 语言继续飞速发展。

2004 年 9 月,J2SE 1.5 发布。这是 Java 第二个里程碑式的版本,为了表示这个版本的重要性,J2SE 1.5 更名为 J2SE 5.0

该版本增加泛型、for-each 循环、自动装箱和拆箱、枚举、可变参数、静态导入、注解、并发包等。

2005 年,Sun 将 Java 的三个版本更名为 Java SE、Java EE 和 Java ME。J2SE 5.0 也被更名为Java SE 5

2006 年 12 月,Java SE 6 发布。该版本在语言语法改进不多,但在虚拟机内部做了大量改进,成为相对成熟稳定的一个版本。于是,很多企业都以这个版本作为 Java 开发版本来使用。

同年 Sun 做了一个伟大的决定,将 Java 开源。通过 OpenJDK 计划,将 Java 虚拟机、Java 编译器和 Java 类库以 GPL 公开。

至此,Java 的生态初具规模,Java 的授权使用方式也很明确,Sun 时代 Java 的发展期结束,正走向它的成熟稳定。

Java 稳定期

2009 年,Oracle 收购 Sun,Java 由 Oracle 继续维护。Java 的 Sun 时代终结,正式进入 Oracle 时代。

2011 年 7 月,Oracle 发布 Java SE 7,主要特性是 NIO2 和 Fork/Join 并发包。

2014 年 3 月,Oracle 发布Java SE 8(LTS),这是 Java 第三个里程碑版本,也是长期(一般 3~5 年)支持的一个版本。

该版本不仅引入 Lambda 表达式支持了函数式编程能力,而且还增加了很多新的语言特性,比如 Streams,Date/Time API,集合的并行计算等。

Java SE 8 像 Java SE 6 一样,被很多企业作为开发版本来使用。尤其是新的 Java 应用,当然也有企业会选择把 Java 6 应用升级到 Java 8 应用。

2017 年 9 月,Oracle 发布 Java SE 9,该版本最大特征就是模块化。

2018 年 3 月,Oracle 发布 Java SE 10,该版本新增局部类型推断 var 等特性。

2018 年 9 月,Oracle 发布 Java SE 11(LTS),这是在 Java SE 8 之后又一个长期支持的版本,该版本开始支持 ZGC。

由于 Java SE 8 逐渐停止维护更新,再加上 Java SE 11 各种优秀的特性,而且是长期支持版本,预测未来很多企业将会使用 Java SE 11 作为开发版本来使用。

从这一年开始,Oracle 也宣布,此后 Java 保持每半年一个大版本的更新。

Java 极简编年史

我们再来看看 Java SE 的历史:

  • 1995.5: JDK Beta

  • 1996.1: JDK 1.0

  • 1998.12: JDK 1.2

  • 2000.5: J2SE 1.3

  • 2002.2: J2SE 1.4

  • 2004.9: J2SE 5.0

  • 2006.12: Java SE 6

  • 2011.7: Java SE 7

  • 2014.3: Java SE 8(LTS)

  • 2017.9: Java SE 9

  • 2018.3: Java SE 10

  • 2018.9: Java SE 11(LTS)

  • 往后每半年更新一个大版本


我是蜗牛,大厂程序员,专注技术原创和个人成长,正在互联网上摸爬滚打。欢迎关注我,和蜗牛一起成长,我们一起牛~下期见!


推荐阅读:

我是如何放弃 JSP,转向 REST 编程的

Spring Boot 项目的这些文件都是干啥用的?


由于微信公众号改版,文章推送会乱序。为了第一时间收到蜗牛的消息,请读者朋友动动小手,点击文章顶部的蓝字关注我后,在公号主页设置里加个星标

戳阅读原文,加入蜗牛的 交流群

这篇关于学习 Java 语言,你必须知道的 Java 简史的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117735

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06