Java 简介及各版本特性

Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。

Java分为三个体系:

  • JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)
  • JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版)
  • JavaME(J2ME)(Java 2 Platform Micro Edition,java平台微型版)。

发展历史

  • 1991 年 Green项目成立,Sun公司的James Gosling等人开始开发名称为 Oak 的语言。希望用于控制嵌入在有线电视交换盒、PDA等的微处理器
  • 1994年将Oak语言更名为Java
  • 1995年5月23日,Java语言诞生
  • 1996年1月23日,Sun公司发布了Java的第一个开发工具包JDK 1.0
  • 1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术
  • 1996年9月,约8.3万个网页应用了JAVA技术来制作
  • 1996年10月,Sun发布第一个JIT编译器
  • 1997年2月18日,JDK1.1发布
  • 1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录
  • 1997年9月,JavaDeveloperConnection社区成员超过十万
  • 1998年2月,JDK1.1被下载超过2,000,000次
  • 1998年12月8日,Sun公司发布了第二代Java平台(简称为Java2)的3个版本:J2ME(Java2 Micro Edition,Java2平台的微型版),应用于移动、无线及有限资源的环境;J2SE(Java 2 Standard Edition,Java 2平台的标准版),应用于桌面环境;J2EE(Java 2Enterprise Edition,Java 2平台的企业版),应用于基于Java的应用服务器。
  • 1999年6月,SUN公司发布Java的三个版本:标准版(JavaSE,以前是J2SE)、企业版(JavaEE以前是J2EE)和微型版(JavaME,以前是J2ME)
  • 2000年5月8日, JDK1.3,J2SE 1.3发布
  • 2000年5月29日,JDK1.4 发布
  • 2001年9月24日,J2EE1.3 发布
  • 2002年2月26日,J2SE1.4 发布
  • 2004年9月30日18:00PM,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5更名为Java SE 5.0(内部版本号1.5.0)
  • 2005年6月,JavaOne大会召开,SUN公司公开JavaSE6,版号与名称全改,取消J2,J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME。而JDK6全称为Java SE Development Kit6。6是产品版本号,1.6是开发者版本号。
  • 2009年04月20日, Oracle公司每股7.5美元收购Sun 总价值 74亿美元
  • 2011年7月28日,Oracle发布Java SE 7
  • 2014年3月18日,Java SE 8 发布
  • 2017年9月21日,Java SE 9 发布
  • 2018年3月21日,Java SE 10 发布
  • 2018年9月25日,Java SE 11 发布
  • 2019年3月20日,Java SE 12 发布
  • 2019年9月17日,Java SE 13 发布
  • 2020年3月17日,Java SE 14 发布

主要特性

  • 简单:java语言是从C++发展起来的,取消了C++中复杂难以掌握的部分,如指针。
  • 面向对象:java语言的基础。java将一切问题都看做对象与对象之间的交互,将对象抽象成方法与属性的集合。
  • 分布性:包含操作分布性与数据分布性两个方面。操作分布性是指由多个主机共同完成一项功能,数据分布性是分布在多台主机上的数据当做一个完成的整体处理。
  • 跨平台:java语言编写的应用程序,不受平台限制,可以由一种平台迁移到另一种平台。
  • 解释型:使用java语言编写的源码被转化为字节码,字节码只有被JVM解释成机器码才能被计算机执行。
  • 安全性:java语言的底层设计可以有效避免非法操作。
  • 健壮性:java提供了许多机制防止运行时出现严重错误,如编译时类型检查、异常处理。
  • 多线程:java支持多线程,允许进程内部多个线程同时工作。

Java 运行环境

Java 运行环境,即Java Runtime Environment,简称为JRE,包含了java虚拟机,java基础类库,是在任何平台上运行Java编写的程序都需要用到的软件环境,是提供给想运行java程序的用户使用的。

JDK是 Java 语言的软件开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。

Java Platform Standard Edition 7 Documentation

JRE的成分

  • Java的类库,包含了编译Java程序所需要的最核心文件。
    • 核心库文件,其中有
    • 数据结构的库,包括列表、字典和树等
    • XML分析库
    • 安全方面应用库
    • 国际化和本地化应用库
    • 综合库文件,包含了程序员和其他系统通信的功能文件。
    • JDBC,即Java数据库联通的API
    • JNDI,即Java命名和目录接口
    • RMI和CORBA用于重新分发软件
    • 用户界面库文件,包含:
    • AWT,即抽象窗口开发包,提供了产生图形用户界面所需要的功能
    • Swing库
    • 其他用于回访媒体文件、录音、截图的库
  • 一个用于执行软件的Java虚拟机(JVM)
  • 插件,可以在浏览器里面使用
  • JWS,可以让终端用户连接到互联网
  • 许可文件和文档

JDK各个版本发布时间和版本名称表

版本 名称 发行日期
JDK 1.0 Oak(橡树) 1996-01-23
JDK 1.1 none(无) 1997-02-19
JDK 1.1.4 Sparkler(宝石) 1997-09-12
JDK 1.1.5 Pumpkin(南瓜) 1997-12-13
JDK 1.1.6 Abigail(阿比盖尔–女子名) 1998-04-24
JDK 1.1.7 Brutus(布鲁图–古罗马政治家和将军) 1998-09-28
JDK 1.1.8 Chelsea(切尔西–城市名) 1999-04-08
J2SE 1.2 Playground(运动场) 1998-12-04
J2SE 1.2.1 none(无) 1999-03-30
J2SE 1.2.1 none(无) 1999-03-30
J2SE 1.2.2 Cricket(蟋蟀) 1999-07-08
J2SE 1.3 Kestrel(美洲红隼) 2000-05-08
J2SE 1.3.1 Ladybird(瓢虫) 2001-05-17
J2SE 1.4.0 Merlin(灰背隼) 2002-02-13
J2SE 1.4.1 grasshopper(蚱蜢) 2002-09-16
J2SE 1.4.2 Mantis(螳螂) 2003-06-26
Java SE 5.0 (1.5.0) Tiger(老虎) 2004-09-30
Java SE 6.0 (1.6.0) Mustang(野马) 2006-04
Java SE 7.0 (1.7.0) Dolphin(海豚) 2011-07-28
Java SE 8.0 (1.8.0) Spider(蜘蛛) 2014-03-18
Java SE 9.0 none(无) 2017-09-21
Java SE 10.0 none(无) 2018-03-21
Java SE 11.0 none(无) 2018-09-25
Java SE 12.0 none(无) 2019-3-19
Java SE 13.0 none(无) 2019-9-17
Java SE 14.0 none(无) 2020-03-17

JDK 各版本特性

老版本
JDK 1.0 1996-01-23

  JDK 1.1.4 Sparkler 宝石 1997-09-12

  JDK 1.1.5 Pumpkin 南瓜 1997-12-13

  JDK 1.1.6 Abigail 阿比盖尔–女子名 1998-04-24

  JDK 1.1.7 Brutus 布鲁图–古罗马政治家和将军 1998-09-28

  JDK 1.1.8 Chelsea 切尔西–城市名 1999-04-08

  J2SE 1.2 Playground 运动场 1998-12-04

  J2SE 1.2.1 none 无 1999-03-30

  J2SE 1.2.2 Cricket 蟋蟀 1999-07-08

  J2SE 1.3 Kestrel 美洲红隼 2000-05-08

  J2SE 1.3.1 Ladybird 瓢虫 2001-05-17

  J2SE 1.4.0 Merlin 灰背隼 2002-02-13

  J2SE 1.4.1 grasshopper 蚱蜢 2002-09-16

  J2SE 1.4.2 Mantis 螳螂 2003-06-26

JDK 1.0(1996.1.23)

Sun公司发布Java1.0,发布初期叫Oak,后改名为Java;

纯解释运行,使用外挂JIT,性能比较差,运行速度慢

代表技术:JVM,Applet,AWT。

JDK 1.1(1997.2.19)

  • JDBC (Java DataBase Connectivity) : 是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。JDBC是面向关系型数据库的。
  • RMI (Remote Method Invocation) :Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。名称中的“Bean”是用于Java的可重用软件组件的惯用叫法。
  • Java Bean:Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。名称中的“Bean”是用于Java的可重用软件组件的惯用叫法。
  • 反射(仅用于内省)
  • 支持国际化和Unicode
  • 支持内部类

J2SE 1.2(1998.12.8)

Java技术体系拆分为:J2SE、J2EE、J2ME

  • JIT (Just In Time):即时编译,又译及时编译、实时编译,动态编译的一种形式,是一种提高程序运行效率的方法。通常,程序有两种运行方式:静态编译与动态直译。静态编译的程序在执行前全部被翻译为机器码,而直译执行的则是一句一句边运行边翻译。
  • EJB技术
  • JFC(Java Foundation Classes),包括Swing 1.0、拖放和Java 2D类库
  • Java plug-in(Java Applet):Web环境下的小程序
  • 集合框架(Collection)
  • 对字符串常量做内存映射
  • 对打包的Java文件进行数字签名
  • 控制授权访问系统资源策略工具
  • Java插件
  • 在JDBC中引入可滚动结果集、BLOB、CLOB、批量更新和用户自定义类型
  • 在Applet中添加声音支持

J2SE 1.3(2000.5.8)

  • 初次引入 HotSpot VM
  • Java命名和目录接口(Java Naming and Directory Interface,缩写JNDI)包含在主程序库中(先前为扩展组件的形式)
  • 用于实现动态代理的类
  • 使用CORBA IIOP实现RMI的通信协议
  • 改进Java2D
  • Java Sound API
  • Jar文件索引
  • 对Java的各个方面做了大量的优化和增强

J2SE 1.4(2002.2.13)

  • 语言上的改变:assert 关键字(断言)

  • 正则表达式

  • 异常链,允许一个异常来封装原先处于较低级别的异常

  • 支持IPv6 安全套接字(Socket)支持(通过SSL与TLS协议)

  • 非阻塞I/O(NIO)

  • 日志Logging API

  • XML解析器

  • XLST转换器

  • Java打印服务

  • Java Web Start

  • Preferences API

  • JDBC 3.0 API

  • Image I/O API

J2SE 5.0(2004.9.30)

  • 泛型: 为集合提供编译期间 (静态) 类型安全,且不须为大多数类型转换 (类型转换) (规范在 JSR 14)
  • 元数据(MetaData): 也称作注解。让语言结构(像是类别和方法)能够用额外的数据标记,可以由元数据意识工具处理(规范在 JSR 175)
  • 枚举
  • 自动装箱拆箱:基本数据类型如int与Integer之间能够自动转换
  • 静态导入(import static)
  • 可变参数
  • JUC
  • 代增强循环 for-each 循环
  • Scanner 类别来解析来自各式各样的输入和缓冲
  • Instrumentation代理类

JavaSE 6(2006.12.11)

  • 引入垃圾回收G1
  • 优化锁与同步、垃圾收集、类加载等
  • @Override 接口
  • 支持动态脚步语言
  • JDBC4.0 API
  • Java Compiler API
  • 可插拔注解
  • 增加对Native PKI(Public Key Infrastructure)、Java GSS(Generic Security Service)、Kerberos和LDAP(Lightweight Directory Access Protocol)的支持
  • 继承Web服务如HTTP服务器API

JavaSE 7(2011.7.28)

  • 钻石型语法(泛型实例化类型自动推断)
  • 支持try-with-resources
  • 在一个语句块中捕获多种异常,多个catch块用|连接
  • switch语句块中允许以字符串作为分支条件
  • 支持动态语言
  • 64位JDK的指针压缩
  • 数值类型可以用2进制字符串表示,并且可以在字符串表示中添加下划线
  • Java NIO.2开发包
  • null值的自动处理
  • 加强对非Java语言的调用支持(JSR-292,升级类加载架构)

JavaSE 8(2014.3.18)

  • Lambda表达式(闭包,允许我们将函数当成参数传递给某个方法)
  • 接口的默认方法和静态方法
  • 方法引用
    无参构造器方法引用:类名::new 或者 Class::new
    静态方法引用:Class::static_method (接受一个Class类型参数)
    类成员方法引用:Class::method (没有参数)
    实例成员方法引用:instance::method (接受一个instance对应类型的参数)
  • 重复注解(同一个地方可以重复使用多次同一个注解,注解本身需要被@Repeatable修饰)
  • 升级工具库实现
    HashMap实现修改、ConCurrentHashMap实现修改
    新增Stream API(java.util.stream)
    新增Optional类以解决空指针问题
  • 工具包,类依赖分析工具 jdeps
  • JVM方面:使用Metaspace(JEP122)代替方法区持久带(PermGen space)
  • 函数式接口
  • Annotation(注解)
  • 并发计数器
  • Pipelines Streams API
  • Parallel操作
  • Optional 类
  • TLS SNI
  • 移除PermGen Error
  • Nashorn, Nashhorn JavaScript 引擎.

JavaSE 9(2017.9.22)

  • 模块系统:模块是一个包的容器,Java 9 最大的变化之一是引入了模块系统(Jigsaw 项目)。

  • REPL (JShell):交互式编程环境。

  • HTTP 2 客户端:HTTP/2标准是HTTP协议的最新版本,新的 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服务器推送特性。

  • 改进的 Javadoc:Javadoc 现在支持在 API 文档中的进行搜索。另外,Javadoc 的输出现在符合兼容 HTML5 标准。

  • 多版本兼容 JAR 包:多版本兼容 JAR 功能能让你创建仅在特定版本的 Java 环境中运行库程序时选择使用的 class 版本。

  • 集合工厂方法:List,Set 和 Map 接口中,新的静态工厂方法可以创建这些集合的不可变实例。

  • 私有接口方法:在接口中使用private私有方法。我们可以使用 private 访问修饰符在接口中编写私有方法。

  • 进程 API: 改进的 API 来控制和管理操作系统进程。引进 java.lang.ProcessHandle 及其嵌套接口 Info 来让开发者逃离时常因为要获取一个本地进程的 PID 而不得不使用本地代码的窘境。

  • 改进的 Stream API:改进的 Stream API 添加了一些便利的方法,使流处理更容易,并使用收集器编写复杂的查询。

  • 改进 try-with-resources:如果你已经有一个资源是 final 或等效于 final 变量,您可以在 try-with-resources 语句中使用该变量,而无需在 try-with-resources 语句中声明一个新变量。

  • 改进的弃用注解 @Deprecated:注解 @Deprecated 可以标记 Java API 状态,可以表示被标记的 API 将会被移除,或者已经破坏。

  • 改进钻石操作符(Diamond Operator) :匿名类可以使用钻石操作符(Diamond Operator)。

  • 改进 Optional 类:java.util.Optional 添加了很多新的有用方法,Optional 可以直接转为 stream。

  • 多分辨率图像 API:定义多分辨率图像API,开发者可以很容易的操作和展示不同分辨率的图像了。

  • 改进的 CompletableFuture API : CompletableFuture 类的异步机制可以在 ProcessHandle.onExit 方法退出时执行操作。

  • 轻量级的 JSON API:内置了一个轻量级的JSON API

  • 响应式流(Reactive Streams) API: Java 9中引入了新的响应式流 API 来支持 Java 9 中的响应式编程。

JavaSE 10 (2018.3.32)

  • JEP286,var 局部变量类型推断。
  • JEP296,将原来用 Mercurial 管理的众多 JDK 仓库代码,合并到一个仓库中,简化开发和管理过程。
  • JEP304,统一的垃圾回收接口。
  • JEP307,G1 垃圾回收器的并行完整垃圾回收,实现并行性来改善最坏情况下的延迟。
  • JEP310,应用程序类数据 (AppCDS) 共享,通过跨进程共享通用类元数据来减少内存占用空间,和减少启动时间。
  • JEP312,ThreadLocal 握手交互。在不进入到全局 JVM 安全点 (Safepoint) 的情况下,对线程执行回调。优化可以只停止单个线程,而不是停全部线程或一个都不停。
  • JEP313,移除 JDK 中附带的 javah 工具。可以使用 javac -h 代替。
  • JEP314,使用附加的 Unicode 语言标记扩展。
  • JEP317,能将堆内存占用分配给用户指定的备用内存设备。
  • JEP317,使用 Graal 基于 Java 的编译器,可以预先把 Java 代码编译成本地代码来提升效能。
  • JEP318,在 OpenJDK 中提供一组默认的根证书颁发机构证书。开源目前 Oracle 提供的的 Java SE 的根证书,这样 OpenJDK 对开发人员使用起来更方便。
  • JEP322,基于时间定义的发布版本,即上述提到的发布周期。版本号为$FEATURE.$INTERIM.$UPDATE.$PATCH,分别是大版本,中间版本,升级包和补丁版本。

JavaSE 11 (2018.9.25)

  • JEP 181:Nest-Based访问控制
  • JEP 309:动态类文件常量
  • JEP 315:改善Aarch64 intrinsic
  • JEP 318:Epsilon:无操作垃圾收集器
  • JEP 320:消除Java EE和CORBA模块
  • JEP 321:HTTP客户端(标准)
  • JEP 323:lambda参数的局部变量语法
  • JEP 324:Curve25519和Curve448关键协议
  • JEP 327:Unicode 10
  • JEP 329:ChaCha20和Poly1305加密算法
  • JEP 330:发射一列纵队源代码程序
  • JEP 331:低开销堆分析
  • JEP 321:HTTP Client
  • JEP 332:传输层安全性(Transport Layer Security,TLS)1.3
  • JEP 328:添加Java飞行记录器(JFR),其用于创建性能分析记录
  • JEP 333:添加ZGC(一个可扩展的低延迟垃圾收集器)
  • JavaFX、Java EE、CORBA 被移出 JDK
  • JEP 335:弃用 Nashorn JavaScript 引擎

JavaSE 12(2019.3.19)

  • JEP 189:Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) :新增一个名为 Shenandoah 的垃圾回收器,它通过在 Java 线程运行的同时进行疏散 (evacuation) 工作来减少停顿时间。
  • JEP 230:Microbenchmark Suite:新增一套微基准测试,使开发者能够基于现有的 Java Microbenchmark Harness(JMH)轻松测试 JDK 的性能,并创建新的基准测试
  • JEP 325:Switch Expressions (Preview) :对 switch 语句进行扩展,使其可以用作语句或表达式,简化日常代码。
  • JEP 334:JVM Constants API :引入一个 API 来对关键类文件 (key class-file) 和运行时工件的名义描述(nominal descriptions)进行建模,特别是那些可从常量池加载的常量。
  • JEP 340:One AArch64 Port, Not Two :删除与 arm64 端口相关的所有源码,保留 32 位 ARM 移植和 64 位 aarch64 移植。
  • JEP 341:Default CDS Archives :默认生成类数据共享(CDS)存档。
  • JEP 344:Abortable Mixed Collections for G1 :当 G1 垃圾回收器的回收超过暂停目标,则能中止垃圾回收过程。
  • JEP 346: Promptly Return Unused Committed Memory from G1 :改进 G1 垃圾回收器,以便在空闲时自动将 Java 堆内存返回给操作系统。

JavaSE 13(2019.9.17)

  • 350: 动态CDS档案。 提高应用程序类 - 数据共享(AppCDS)的可用性。消除了用户进行试运行以创建每个应用程
    序的类列表的需要。-Xshare:dump使用类列表由该选项启用的静态归档应继续工作。这包括内置类
    加载器和用户定义的类加载器的类。
  • 351: ZGC:取消提交未使用的内存。 增强ZGC以将未使用的堆内存返回给操作系统。
  • 353: 重新实现旧版套接字API
  • 354: switch优化更新(预览版)
  • 355: 文本块升级,文字块(预览)

JavaSE 14(2020.3.17)

  • 305:instanceof的模式匹配(预览)
  • 343:包装工具(培养箱)
  • 345:G1的NUMA感知内存分配
  • 349:JFR事件流
  • 352:非易失性映射字节缓冲区
  • 358:有用的NullPointerExceptions
  • 359:记录(预览)
  • 361:开关表达式(标准)
  • 362:弃用Solaris和SPARC端口
  • 363:删除并发标记扫描(CMS)垃圾收集器
  • 364:Mac OS上的ZGC
  • 365:Windows上的ZGC
  • 366:弃用ParallelScavenge + SerialOld GC组合
  • 367:删除Pack200工具和API
  • 368:文本块(第二预览)
  • 370:外部存储器访问API(孵化器)

Oracle Java SE支持路线图

Oracle Java SE支持路线图*†
发布 GA日期 首要支持,直到 扩展支持,直到 持续支持
7 2011年7月 2019年七月 2022年7月***** 不定
8 ** 2014年3月 2022年3月 2030年12月 不定
9(非LTS) 2017年9月 2018年三月 无法使用 不定
10(非LTS) 2018年三月 2018年9月 无法使用 不定
11(LTS) 2018年9月 2023年9月 2026年9月 不定
12(非LTS) 2019年三月 2019年九月 无法使用 不定
13(非LTS) 2019年九月 2020年3月 无法使用 不定
14(非LTS) 2020年3月*** 2020年9月 无法使用 不定
15(非LTS) 2020年9月*** 2021年3月 无法使用 不定

Oracle OpenJDK版本

Oracle Java SE支持路线图

Java类库提升

Java5 Java6 Java7 Java8 Java9 Java10
发框架(J.U.C) JDBC 4.0 NIO 2 Stream API Reactive Streams Flow API Java-Based JIT Compiler
格式化(Fomatter) JAXB 2.0 Fork/Join框架 CompletableFuture Process API Updates
Java管理扩展(JMX) 可插拔注解处理AP Iinvokedynamic字节码 Annotation on Java Types Variable Handles
Instrumentation Common Annotations Date and Time API Method Handles
XML处理(DOM、SAX、XPath、XSTL) Java Compiler Api 可复制Annotations Spin-Wait Hints
Scripting in JVM JavaScript运行时 Stack-Walking API

Reference

Java 简介

Java历史简介

【Java】1.Java语言的诞生与发展史(版本时间线)

最全的Java版本历史

Java的各个版本和各个版本的历史版本号的关系与解读

Java版本历史和新特性

【JAVA各版本特性】JAVA 1.0 - JAVA 13

JDK 13

Oracle OpenJDK版本

Oracle Java SE支持路线图

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!