Java 基础系列之 一:你了解 Java 么?

问题

  1. java 是否一门多范式的语言,你知道么?支持哪些编程范式?
  2. JRE 和 JDK 分别指什么?它们的关系是咋样的?
  3. 为什么安装 JDK 的时候会安装两个 JRE?
  4. Java8 到 Java13 都有哪些重大变化?JRE从哪个版本开始退出历史舞台,原因是什么?

目标

对 Java 发展、主要特性、构成有一个基本的了解。

Java 是多范式的语言

  1. 传统 Java 是解释型的语言,现在的 JIT、AOT 技术,让 Java 也支持了编译型语言的特性;
  2. 传统 Java 是面向对象的语言,JDK8 引入 Lambda,让 Java 支持函数式编程范式。
  3. 传统 Java 是命令式编程范式,JDK9 引入 Flow,让 Java 更好的支持响应式编程范式;

基础概念

Java SE:Java Platform Standard Edition

JRE:Java Runtime Environment

JDK:Java Development Kit

JVM:Java Virtual Machine

看这张图,上面的关系应该非常清晰了。

Java 基础系列之 一:你了解 Java 么?
注:从 Java 9 开始上面的图没有了。

java 版本发布时间

  • JDK 1.0 (January 23, 1996)
  • JDK 1.1 (February 19, 1996)
  • J2SE 1.2 (December 8, 1998)
  • J2SE 1.3 (May 8, 2000)
  • J2SE 1.4 (February 6, 2002)
  • J2SE 5.0 (September 30, 2004)
  • Java SE 6 (December 11, 2006)
  • Java SE 7 (July 28, 2011)
  • Java SE 8 (March 18, 2014):Lambda
  • Java SE 9 (September 21, 2017):Java 模块系统、HTTP2、JShell、Reactive Streams、G1 为默认 GC。
  • Java SE 10 (March 20, 2018):并行 G1
  • Java SE 11 (September , 2018):ZGC
  • Java SE 12 (March 19, 2019):Shenandoah GC
  • Java SE 13 (September 17, 2019)

注:从 Java 9 开始每半年一个版本

答疑

JDK 和 JRE 的关系是什么?

JDK 包含了 JRE,上图说明了一切。最明显的区别就是开发使用的 javac 只有jdk 有,jre 没有,只有 jre 能运行 java 程序但是不能编译 java 代码。

为什么安装 JDK 的时候会安装两个 JRE?

首先必须理解 JRE 和 JDK 的关系。在此基础上,运行普通的 Java 程序,必须依赖 JRE,而 JDK 是可选的。而对于开发者来说,需要编译 java 代码,JRE 没有 javac,因此需要 JDK,如果我安装 JDK 的时候,JDK 默认包含了 JRE。

JRE从哪个版本开始退出历史舞台,原因是什么?

JRE 最初存在的部分原因是为了支持 applet 和 swing,但是这些目前已经基本处于无用的状态,而且给 java 新的发展带来了很大的包袱。jre最初存在部分原因是类似web start,applet的需要,现在也基本进入终场了

从 Java9 开始出现了jigsaw,用 Jlink可以定制最合适的 runtime,plugin之类的也逐渐退役了,jre 单独需求在降低。java11开始,Oracle和openJDK就不再有JRE这个单独的文件夹了。你直接下载使用JDK就好了。

Java8 到 Java13 都有哪些重大变化?

后续我会专门一篇文章说明。