Java 语言是一门存在了 20 多年的语言,其年纪比我自己还大。虽然存在了这么长时间,但 Java 至今都是最大的工业级语言,许多大型互联网公司均采用 Java 来实现其业务系统。大到国际电商巨头阿里巴巴,小到无名小公司,我们均可看到 Java 的身影。

我是 2010 年开始接触 Java 语言的,在我刚刚接触 Java 的时候,我经常对于 Java 中的一些基本概念弄不清楚。例如:JDK 7 与 Java SE 7 有什么区别?JDK 与 JRE 有什么区别 ?Java SE 与 Java EE 有什么区别 ?等等。

上面这些问题其实都是 Java 中最最基础的知识,如果没有搞懂这些基础的知识,就不用谈更加深入的学习了。所以在开始学习 JVM 相关知识之前,我们这一节就来把那些我们经常混淆的概念弄清楚。

JDK 与 JRE

JDK 与 JRE 是我们经常遇到的概念,但许多学习了几年的开发都搞不懂他们之间的区别。简单地说 JRE(Java Runtime Environment)仅包含运行 Java 程序的必需组件,包括 Java 虚拟机以及 Java 核心类库等。而 JDK(Java Development Kit)除了包含 JRE外,还附带了一系列开发、诊断工具。

一般来说,如果只需要运行 Java 程序,那么你安装 JRE 即可。但如果你要进行 Java 程序的开发,那么你就需要安装 JDK。

JDK 与 J2SE

JDK 与 Java SE 是我们经常混淆的东西,其实 JDK 是指包含了开发、诊断工具的一个组件,Java SE 则是 Java 三大技术体系的一个。要弄懂这一点,就要了解 Java 语言的历史。在 1998 年,JDK 1.2 发布,Java 技术体系被拆分为 J2SE、J2EE、J2ME 三大体系。

J2SE 称之为标准版技术体系(Java 2 Standard Edition),它包含了构成 Java 语言核心的类,例如:数据库连接、网络编程、接口定义等。J2SE 技术体系主要用于桌面应用软件的编程。正因为 J2SE 包含了 JDK 核心类,所以在我们下载 JDK 时,你会看到其实下载处的文字说明是「Java SE 11.0.1 is the latest release for JDK 11」。

J2EE 称之为企业版技术体系(Java 2 Enterprise Edition),它除了包含 J2SE 中的类,还包含用于开发企业级应用的类,比如:Servlet、JSP、EJB 等。J2EE 技术体系主要用于分布式的网络程序的开发,如电子商务网站等。

J2ME 称之为嵌入式技术体系(Java 2 Micro Edition),它包含 J2SE 中的一部分类。J2ME 技术体系主要用于消费类电子产品的软件开发,例如:手机、PDA、寻呼机等。

通过这么一介绍,我相信大家都明白 JDK 与 Java SE 的区别了。简单地说,JDK 是一个核心库、开发工具、诊断工具的合集,而 Java SE 则是一个技术体系。

J2SE 与 Java SE

J2SE 我们弄明白了,那么你知道 J2SE 与 Java SE 这两者有什么区别吗?

其实它们指的是同一个东西,只不过在 2006 年 JDK 1.6 发布的时候,其将 J2SE、J2EE、J2ME 的命名方式改为 Java SE 6、Java EE 6、Java ME 6。

所以在下一次 JDK 1.7 发布的时候,其对应的三个技术体系就叫做:Java SE 7、Java EE 7、Java ME 7。比起之前的命名方式,其增加了 JDK 的版本号,能够更加清晰地表明技术体系所属的 JDK 版本。

与这个类似的还有一个:JDK 1.7 与 JDK 7。其实从上面 J2SE 与 Java SE 的变更,我们可以推断,JDK 1.7 与 JDK 7 也是因为类似的命名更换导致的。

经过上面的简单介绍,相信大家对于一些基础概念的理解都差不多了。Java 语言发展至今已有多年历史,但其也不是一蹴而就的,一开始 Java 语言知识一个小小的 Oak 语言。

Java 语言的历史

在 1991 年,James Gosling 博士发布了 Oak,这个是 Java 语言的前身。但一直到 1995 年的时候,Oak 语言才改名为 Java。

  • 1991 年,James Gosling 博士发布产品 Oak,这是 Java 语言的前身。
  • 1995 年,Oak 语言改名为 Java。
  • 1996 年,JDK1.0 发布,提供了纯解释执行的 Java 虚拟机实现:Sun Classic VM。
  • 1997 年,JDK1.1 发布,代表技术有:JDBC、JavaBeans、内部类、反射。
  • 1998 年,JDK1.2 发布,Java 技术体系被拆分为 J2SE、J2EE、J2ME 三大体系。
  • 2000 年,JDK1.3 发布,默认的 Java 虚拟机由 Sun Classic VM 改为 HotSopt。
  • 2002 年,JDK1.4 发布,Java 真正走向成熟,代表技术有:正则表达式、NIO等。
  • 2004 年,JDK1.5 发布,对语法易用性做了很大改进,新增了泛型、枚举等,代表技术有:并发包等。
  • 2006 年,JDK1.6 发布,将 J2EE/J2SE/J2ME 的命名方式改为 Java SE 6、Java EE 6、Java ME 6。
  • 2009 年,Sun 公司因为经营不善被 Oracle 公司收购。
  • 2011 年,JDK1.7 发布。
  • 2013 年,JDK1.8 发布。

从上面的历史我们可以知道 Java 语言具有众多的特性,但是其众多特性并不是一蹴而就的,而是一点点迭代而来的。JDK 每个版本新增的语言特性如下:

  • 1997 年,JDK1.1 发布,新增了JDBC、JavaBeans、内部类、反射。
  • 2002 年,JDK1.4 发布,新增了正则表达式、NIO等。
  • 2004 年,JDK1.5 发布,新增了泛型、枚举、并发包等。

总结

我们这一节简单地介绍了一些常见概念上的区别,以及 Java 语言的历史。通过这一节的内容,我们能对 Java 语言的发展有一个大致的理解,便于我们后续进行更加深入的学习。


如果只是看,其实无法真正学会知识的。为了帮助大家更好地学习,我建了一个虚拟机群,专门讨论学习 Java 虚拟机方面的内容,每周针对我所发文章进行讨论答疑。如果你有兴趣,关注「Java技术精选」公众号,通过右下角菜单「入群交流」加我好友,小助手会拉你入群。


JVM基础系列文章目录

JVM基础系列第1讲:Java 语言的前世今生的更多相关文章

  1. JVM基础系列第6讲:Java 虚拟机内存结构

    看到这里,我相信大家对于一个 Java 源文件是如何变成字节码文件,以及字节码文件的含义已经非常清楚了.那么接下来就是让 Java 虚拟机运行字节码文件,从而得出我们最终想要的结果了.在这个过程中,J ...

  2. JVM基础系列第2讲:Java 虚拟机的历史

    说起 Java 虚拟机,许多人就会将其与 HotSpot 虚拟机等同看待.但实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM.Exact VM.BEA JRock ...

  3. JVM基础系列第15讲:JDK性能监控命令

    查看虚拟机进程:jps 命令 jps 命令可以列出所有的 Java 进程.如果 jps 不加任何参数,可以列出 Java 程序的进程 ID 以及 Main 函数短名称,如下所示. $ jps 6540 ...

  4. JVM基础系列第14讲:JVM参数之GC日志配置

    说到 Java 虚拟机,不得不提的就是 Java 虚拟机的 GC(Garbage Collection)日志.而对于 GC 日志,我们不仅要学会看懂,而且要学会如何设置对应的 GC 日志参数.今天就让 ...

  5. JVM基础系列第13讲:JVM参数之追踪类信息

    我们都知道 JVM 在启动的时候会去加载类信息,那么我们怎么得知他加载了哪些类,又卸载了哪些类呢?我们这一节就来介绍四个 JVM 参数,使用它们我们就可以清晰地知道 JVM 的类加载信息. 为了方便演 ...

  6. JVM基础系列第11讲:JVM参数之堆栈空间配置

    JVM 中最重要的一部分就是堆空间了,基本上大多数的线上 JVM 问题都是因为堆空间造成的 OutOfMemoryError.因此掌握 JVM 关于堆空间的参数配置对于排查线上问题非常重要. tips ...

  7. JVM基础系列第10讲:垃圾回收的几种类型

    我们经常会听到许多垃圾回收的术语,例如:Minor GC.Major GC.Young GC.Old GC.Full GC.Stop-The-World 等.但这些 GC 术语到底指的是什么,它们之间 ...

  8. JVM基础系列第9讲:JVM垃圾回收器

    前面文章中,我们介绍了 Java 虚拟机的内存结构,Java 虚拟机的垃圾回收机制,那么这篇文章我们说说具体执行垃圾回收的垃圾回收器. 总的来说,Java 虚拟机的垃圾回收器可以分为四大类别:串行回收 ...

  9. JVM基础系列第8讲:JVM 垃圾回收机制

    在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由<Java 虚拟机规范>指定的,每个 Java 虚拟机可能都有不同的实现.其实涉及到 Java 虚拟机的内存, ...

随机推荐

  1. 关于使用spring版本4.1.6注解@Import报错

    记录一下遇到的错误 org.springframework.beans.factory.parsing.BeanDefinitionParsingException: 使用环境:spring 4.1. ...

  2. react使用过程中常见问题

    目录 一.减小输入字符数 二.用props.children来引用位于前置标签和后置标签之间的内容 三.创建组件两条主要的途径 四.JSX属性采用驼峰式的大小写规则(即‘onClick’而非‘oncl ...

  3. 平时作业七 Java

    以下是几本计算机书籍的基本信息编号 书名 价格 出版社1 JAVA基础 32 清华大学出版社2 JAVA WEB开发 40 电子工业出版社3 面向对象程序设计 28 清华大学出版社4 Struts开发 ...

  4. Pi 3B+编译安装python3.6.8

    树莓派镜像版本2018-11-13,更新到2019-01-09 sudo apt-get update sudo apt-get upgrade -dev libgdbm-dev libsqlite3 ...

  5. 重启Oracle 服务

    1.oracle用户进入sqlplus sqlplus /nolog connect /as sysdba startup exit 2.进去操作系统启动监听 lsnrctl start 3.使用we ...

  6. 移动UI框架

    ---恢复内容开始--- 一,框架使用selenium+appium+po+unittest+python 1.其中po表示居于page of boject的思想,unittest是单元测试框架 2. ...

  7. Android APT

    APT APT(Annotation Processing Tool)是一种处理注释的工具,它对源代码文件进行检测找出其中的Annotation,使用Annotation进行额外的处理. Annota ...

  8. VS启动Winform项目提示:不支持互操作调试

    64 位平台不支持互操作调试(托管 + 非托管混合模式调试). 在VS中设置项目属性--->调试--->取消选中“启用本地代码调试”. 此问题在.NET FrameWork低版本框架会出现 ...

  9. 【转】线段树完全版~by NotOnlySuccess

    线段树完全版  ~by NotOnlySuccess 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章了,觉 ...

  10. 性能测试学习 第九课--LR12中controller基础知识

    1.设计手工场景,理解集合点的策略 2.添加load generator 一.controller基础知识 1.controller的原理 通过场景设计来模拟用户的真实操作并调用vugen中的脚本,然 ...