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. Cookie、cookie使用方法

    Cookie.cookie使用方法.保存用户名密码 //设置Cookie, //cname 获取时所需参数 //username,password 用于记住账号密码,如果只要存一个参数 passwor ...

  2. c++ 积累

    class MyClass { public: MyClass()=default; MyClass(const MyClass& )=delete; ...... 有些时候我们希望限制默认函 ...

  3. G - Surf Gym - 100819S -逆向背包DP

    G - Surf Gym - 100819S 思路 :有点类似 逆向背包DP , 因为这些事件发生后是对后面的时间有影响. 所以,我们 进行逆向DP,具体 见代码实现. #include<bit ...

  4. VScode加文件头的方式

    在VScode中添加文件头,设置文件编辑者的方式,在软件中查询到file-header插件: 安装好,此时通过是可以生成默认的文件头.如果需要修改配置,在文件=>首选项=>设置中修改: 查 ...

  5. Win10 安装Oracle11g2、配置PL/SQL Developer11环境

    Oracle11g2的下载地址(下载以下两个压缩包,解压后得到两个oracle目录,放到一起就得到完整的安装文件了): 1.Oracle11g2: oracle-part-1 oracle-part- ...

  6. Windows10用fiddler抓包Android应用(解决手机设置代理后无法上网,设置只抓app包)

    1.环境准备 1.电脑上安装fiddler 2.手机和电脑在同一个局域网内 2.设置 1.fiddler>Tools>Fiddler Options>Connections 勾选Al ...

  7. PeopleSoft 后台更新密码

    一.SQL脚本 where t.oprid='&opridName' ; 二.Data Mover 1.指定用户加密ENCRYPT_PASSWORD 用户名;2.所有用户ENCRYPT_PAS ...

  8. 关于阿里云Centos7 Mailx发送邮件失败的处理

    开始通过配置系统自带的mail 发送邮件 在其中一台服务器怎么都不行 /etc/mail.rc配置: set from="邮箱名" set smtp="smtp.163. ...

  9. Go语言基础之结构体

    Go语言基础之结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在G ...

  10. PyCharm下载及使用

    PyCharm教育版是一款能够对你编写Python程序的工作有所帮助的免费编译器. PyCharm-community下载链接:https://pan.baidu.com/s/1Hwd_TOVA3en ...