什么是Java以及Java的发展历程

2024-08-30 20:44
文章标签 java 发展 历程

本文主要是介绍什么是Java以及Java的发展历程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Java是什么

搜索百度百科词条

Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。
Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等

Java作为一门编程语言,吸收了C++语言的有点,同时拥有功能强大和易用,才使得Java的应用比较广泛;那么我们得了解一下Java语言诞生的过程

Java的发展历史(摘自Java发展史)

  • 1996年1月,Sun公司发布了Java的第一个开发工具包(JDK 1.0),这是Java发展历程中的重要里程碑,标志着Java成为一种独立的开发工具。9月,约8.3万个网页应用了Java技术来制作。10月,Sun公司发布了Java平台的第一个即时(JIT)编译器。
  • 1997年2月,JDK 1.1面世,在随后的3周时间里,达到了22万次的下载量。4月2日,Java One会议召开,参会者逾一万人,创当时全球同类会议规模之纪录。9月,Java Developer Connection社区成员超过10万。
  • 1998年12月8日,第二代Java平台的企业版J2EE发布。
  • 1999年6月,Sun公司发布了第二代Java平台(简称为Java2)的3个版本:J2ME(Java2 Micro Edition,Java2平台的微型版),应用于移动、无线及有限资源的环境;J2SE(Java 2 Standard Edition,Java 2平台的标准版),应用于桌面环境;J2EE(Java 2Enterprise Edition,Java 2平台的企业版),应用于基于Java的应用服务器。Java 2平台的发布,是Java发展过程中最重要的一个里程碑,标志着Java的应用开始普及。
  • 1999年4月27日,HotSpot虚拟机发布。HotSpot虚拟机发布时是作为JDK 1.2的附加程序提供的,后来它成为了JDK 1.3及之后所有版本的Sun JDK的默认虚拟机 。
  • 2000年5月,JDK1.3、JDK1.4和J2SE1.3相继发布,几周后其获得了Apple公司Mac OS X的工业标准的支持。
  • 2001年9月24日,J2EE1.3发布。
  • 2002年2月26日,J2SE1.4发布。自此Java的计算能力有了大幅提升,与J2SE1.3相比,其多了近62%的类和接口。在这些新特性当中,还提供了广泛的XML支持、安全套接字(Socket)支持(通过SSL与TLS协议)、全新的I/OAPI、正则表达式、日志与断言。
  • 2004年9月30日,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE 1.5更名为Java SE 5.0(内部版本号1.5.0),代号为“Tiger”,Tiger包含了从1996年发布1.0版本以来的最重大的更新,其中包括泛型支持、基本类型的自动装箱、改进的循环、枚举类型、格式化I/O及可变参数。
  • 2005年6月,在Java One大会上,Sun公司发布了Java SE 6。此时,Java的各种版本已经更名,已取消其中的数字2,如J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME。
  • 2006年11月13日,Java技术的发明者Sun公司宣布,将Java技术作为免费软件对外发布。Sun公司正式发布的有关Java平台标准版的第一批源代码,以及Java迷你版的可执行源代码。从2007年3月起,全世界所有的开发人员均可对Java源代码进行修改。
  • 2009年,甲骨文公司宣布收购Sun 。
  • 2010年,Java编程语言的共同创始人之一詹姆斯·高斯林从Oracle公司辞职。
  • 2011年,甲骨文公司举行了全球性的活动,以庆祝Java7的推出,随后Java7正式发布。
  • 2014年,甲骨文公司发布了Java8正式版。

因为上面文章只更新到了 2014 年 Java8 截止,但是到目前为止 Java已经更新到 20 了,所以,去官网上看看learn Java,如图所示,从Java8到Java9经历了3年,后续的版本都是6个月一个迭代

Java-release_cadence_21.png

上面的图,是从官网的新特性中找到的,如下:


Java新特性.png

Java Platform Evolution

文中主要介绍了
2014 年,Java带来了 Lambda expressions、Stream API、Optional等,使得Java8成为最受欢迎的版本,但是,也建议我们使用高版本的Java,因为有很多其他的新特性

Java的更新

Java8后,每年的更新情况,可以参考 Project Amber
Java10后,每个版本的更新也可以参考,如下连接,(修改指定的jdk版本,下面是10)

https://openjdk.org/projects/jdk/10/

也可以看JavaGuide的总结
https://javaguide.cn/java/new-features/java9.html

JEP 222: Java 命令行工具open in new window
JEP 261: 模块化系统open in new window
JEP 248:G1 成为默认垃圾回收器open in new window
JEP 193: 变量句柄open in new window
JEP 254:字符串存储结构优化open in new window

https://javaguide.cn/java/new-features/java10.html

JEP 286:局部变量类型推断open in new window
JEP 304:垃圾回收器接口open in new window
JEP 307:G1 并行 Full GCopen in new window
JEP 310:应用程序类数据共享(扩展 CDS 功能)open in new window
JEP 317:实验性的基于 Java 的 JIT 编译器open in new window

https://javaguide.cn/java/new-features/java11.html

JEP 321:HTTP Client 标准化open in new window
JEP 333:ZGC(可伸缩低延迟垃圾收集器)open in new window
JEP 323:Lambda 参数的局部变量语法open in new window
JEP 330:启动单文件源代码程序open in new window

https://javaguide.cn/java/new-features/java12-13.html
https://javaguide.cn/java/new-features/java14-15.html
https://javaguide.cn/java/new-features/java16.html
https://javaguide.cn/java/new-features/java17.html

JEP 306:Restore Always-Strict Floating-Point Semantics(恢复始终严格的浮点语义)open in new window
JEP 356:Enhanced Pseudo-Random Number Generators(增强的伪随机数生成器)open in new window
JEP 382:New macOS Rendering Pipeline(新的 macOS 渲染管道)open in new window
JEP 391:macOS/AArch64 Port(支持 macOS AArch64)open in new window
JEP 398:Deprecate the Applet API for Removal(删除已弃用的 Applet API)open in new window
JEP 403:Strongly Encapsulate JDK Internals(更强大的封装 JDK 内部元素)open in new window
JEP 406:Pattern Matching for switch (switch 的类型匹配)open in new window(预览)
JEP 407:Remove RMI Activation(删除远程方法调用激活机制)open in new window
JEP 409:Sealed Classes(密封类)open in new window(转正)
JEP 410:Remove the Experimental AOT and JIT Compiler(删除实验性的 AOT 和 JIT 编译器)open in new window
JEP 411:Deprecate the Security Manager for Removal(弃用安全管理器以进行删除)open in new window
JEP 412:Foreign Function & Memory API (外部函数和内存 API)open in new window(孵化)
JEP 414:Vector(向量) API open in new window(第二次孵化)
JEP 415:Context-Specific Deserialization Filters

https://javaguide.cn/java/new-features/java18.html
https://javaguide.cn/java/new-features/java19.html
https://javaguide.cn/java/new-features/java20.html

到目前为止,更新的版本号为20,其中除了 Java8,Java11Java17 都是两个长期支持的版本,也比较重要

jdk版本支持图.png

Java语言的特点

  1. 面向对象
    Java 是一种面向对象的语言,它对对象中的类、对象、继承、封装、多态、接口、包等均有很好的支持。为了简单起见,Java 只支持类之间的单继承,但是可以使用接口来实现多继承。使用 Java 语言开发程序,需要采用面向对象的思想设计程序和编写代码。

  2. 平台无关性
    平台无关性的具体表现在于,Java 是“一次编写,到处运行(Write Once,Run any Where)”的语言,因此采用 Java 语言编写的程序具有很好的可移植性,而保证这一点的正是 Java 的虚拟机机制。在引入虚拟机之后,Java 语言在不同的平台上运行不需要重新编译。
    Java 语言使用 Java 虚拟机机制屏蔽了具体平台的相关信息,使得 Java 语言编译的程序只需生成虚拟机上的目标代码,就可以在多种平台上不加修改地运行。

  3. 简单性
    Java 语言的语法与 C 语言和 C++ 语言很相近,使得很多程序员学起来很容易。对 Java 来说,它舍弃了很多 C++ 中难以理解的特性,如操作符的重载和多继承等,而且 Java 语言不使用指针,加入了垃圾回收机制,解决了程序员需要管理内存的问题,使编程变得更加简单。

  4. 解释执行
    Java 程序在 Java 平台运行时会被编译成字节码文件,然后可以在有 Java 环境的操作系统上运行。在运行文件时,Java 的解释器对这些字节码进行解释执行,执行过程中需要加入的类在连接阶段被载入到运行环境中。

  5. 多线程
    Java 语言是多线程的,这也是 Java 语言的一大特性,它必须由 Thread 类和它的子类来创建。Java 支持多个线程同时执行,并提供多线程之间的同步机制。任何一个线程都有自己的 run() 方法,要执行的方法就写在 run() 方法体内。

  6. 分布式
    Java 语言支持 Internet 应用的开发,在 Java 的基本应用编程接口中就有一个网络应用编程接口,它提供了网络应用编程的类库,包括 URL、URLConnection、Socket 等。Java 的 RIM 机制也是开发分布式应用的重要手段。

  7. 健壮性
    Java 的强类型机制、异常处理、垃圾回收机制等都是 Java 健壮性的重要保证。对指针的丢弃是 Java 的一大进步。另外,Java 的异常机制也是健壮性的一大体现。

  8. 高性能
    Java 的高性能主要是相对其他高级脚本语言来说的,随着 JIT(Just in Time)的发展,Java 的运行速度也越来越高。

  9. 安全性
    Java 通常被用在网络环境中,为此,Java 提供了一个安全机制以防止恶意代码的攻击。除了 Java 语言具有许多的安全特性以外,Java 还对通过网络下载的类增加一个安全防范机制,分配不同的名字空间以防替代本地的同名类,并包含安全管理机制。
    Java 语言的众多特性使其在众多的编程语言中占有较大的市场份额,Java 语言对对象的支持和强大的 API 使得编程工作变得更加容易和快捷,大大降低了程序的开发成本。Java 的“一次编写,到处执行”正是它吸引众多商家和编程人员的一大优势。

Java语言的缺点

1.性能
Java 需要在运行时进行解释,这使得它可以在每个操作系统上运行,但也使它的性能比C和C++等语言慢。另一方面,C++程序需要在每个操作系统上编译,直接编译成二进制,因此运行速度更快。

2.内存消耗
Java 程序在 Java 虚拟机之上运行,因此会消耗更多内存。

3.垃圾收集
Java 提供了程序员无法控制的自动垃圾收集。它不提供 delete() 和 free() 之类的方法来释放内存。

4.底层操作
Java 处理一些底层操作时可能不是很方便,有时候需要使用JNI等方式来调用底层的代码。同时,Java的安全模型也有一些限制,有时需要将某些需要高权限的操作委托给其他语言来完成



喜欢的朋友记得点赞、收藏、关注哦!!!

这篇关于什么是Java以及Java的发展历程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Security常见问题及解决方案

《SpringSecurity常见问题及解决方案》SpringSecurity是Spring生态的安全框架,提供认证、授权及攻击防护,支持JWT、OAuth2集成,适用于保护Spring应用,需配置... 目录Spring Security 简介Spring Security 核心概念1. ​Securit

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1

spring中的@MapperScan注解属性解析

《spring中的@MapperScan注解属性解析》@MapperScan是Spring集成MyBatis时自动扫描Mapper接口的注解,简化配置并支持多数据源,通过属性控制扫描路径和过滤条件,利... 目录一、核心功能与作用二、注解属性解析三、底层实现原理四、使用场景与最佳实践五、注意事项与常见问题六

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避