浅谈JAVA版本号的问题 Java版本号与JDk版本

初学Java时便一直疑惑Java版本号到底是如何命名的?时常在网上看到Java5、Java6、Java7、Java8 (到今天已经到了Java12了,2019.4.5) 这一类 “Java X” 的Java版本名称,同时又会看到诸如JDK1.5、JDK1.6这中 “JDK1.X” 的JDK叫法。

一直以来都在纠结Java以及JDK的规范版本名称到底是如何,直到最近在几本书上看到了相关的解释才有点明白,

现总结在这里:

首先1996年发布了最初版本Java1.0(此前原型为1995年的Oak,因Oak商标已被占用后改名为Java),此后为Java1.1、J2SE1.2、J2SE1.3、J2SE1.4、采用 1.X的命名方式,直到2004年的JavaOne会议后版本数提升为5.0,这一新版本为Java SE5.0(或J2SE5.0,此处存在疑问,网上使用较多为Java SE5),在2006年Sun公司终结了已经有8年历史的J2SE、J2EE、J2ME的命名方式启用了今天的 Java SE、Java EE、Java ME 命名方式,而此后的版本为Java SE6、Java SE7、Java SE8、Java SE9、Java SE10、Java SE11、Java SE12。

而JDK则在 Java1.0 到 Java9 对应每一个版本号 :JDK1.0、JDK1.2 ... JDK1.8、JDK1.9,Java10以后JDK对应名称为:JDk10、JDK11、JDK12。

时间线如下:

Java SE版本时间线
Java SE版本 JDK版本 发布时间 开发代号
Oak 1995-05-23 Oak(橡树)
Java 1.0 JDK1.0 1996-01-23
Java 1.1 JDK1.1 1997-02-18
J2SE 1.2 JDK1.2 1998-12-04 Playground(运动场
J2SE 1.3 JDK1.3 2000-05-08 Kestrel(美洲红隼)
J2SE 1.4 JDK1.4 2002-02-13 Merlin(灰背隼)
Java SE 5.0 JDK1.5 2004-09-29 Tiger(老虎)
Java SE 6 JDK1.6 2006-12-11 Mustang(野马)
Java SE 7 JDK1.7 2011-07-28 Dolphin(海豚)
Java SE 8 JDK1.8 2014-03-18 Spider(蜘蛛)
Java SE 9 JDK1.9 2017-09-21
Java SE 10 JDK10 2018-03-21
Java SE 11 JDK11 2018-09-25
Java SE 12 JDK12 2019-3-20

下图来自《Java核心技术》卷1 第2章 2.1.1

你已经看到, JDK 是 Java Development Kit 的缩写。

有点混乱的是:这个工具包的版本1.2 ~ 版本 1.4 被称为 Java SDK (软件开发包, Software Development Kit )。 在某些场合下,还可以看到这个过时的术语。

另外, 还有一个术语是 Java 运行时环境( JRE ), 它包含虚拟机但不包含编译器。这并不是开发者想要的环境, 而是专门为不需要编译器的用户而提供。

接下来, Java SE 会大量出现, 相对于 Java EE ( Enterprise Edition) 和 Java ME ( MicroEdition ), 它是 Java 的标准版。

Java 2 这种提法始于 1998 年。当时 Sim 公司的销售人员感觉增加小数点后面的数值改变版本号并没有反映出 JDK 1.2 的重大改进。但是,由于在发布之后才意识到这个问题, 所以决定开发工具包的版本号仍然沿用 1.2, 接下来的版本是 1.3、 1.4 和 5.0, 但是, Java 平台被重新命名为 Java 2。

因此, 就有了 Java 2 Standard Edition Software Development Kit ( Java 2标准版软件开发包)的 5.0 版,即 J2SE SDK 5.0。

幸运的是,2006 年版本号得到简化。 Java 标准版的下一个版本取名为 Java SE 6, 后来又有了 Java SE 7 和 Java SE 8。

不过,“- 内部” 版本号分别是 1.6.0、 1.7.0 和 1.8.0。

当 Oracle 为解决一些紧急问题做出某些微小的版本改变时, 将其称为更新。

例如: JavaSE 8u31 是 JavaSE 8 的第 31 次更新, 它的内部版本号是 1.8.0_31。 更新不需要安装在前一个版本上,它会包含整个 JDK 的最新版本。

另外, 并不是所有更新都公开发布, 所以如果“ 更新 31” 之后没有“ 更新 32”,你也不用惊慌。

----引自《Java核心技术》卷1 第2章 2.1.1

补充知识:JDK 版本号对应的数字

如下所示:

J2SE 8 = 52 (0x34 hex)
J2SE 7 = 51 (0x33 hex)
J2SE 6.0 = 50 (0x32 hex)
J2SE 5.0 = 49 (0x31 hex)
JDK 1.4 = 48 (0x30 hex)
JDK 1.3 = 47 (0x2F hex)
JDK 1.2 = 46 (0x2E hex)
JDK 1.1 = 45 (0x2D hex)

以上这篇浅谈JAVA版本号的问题 Java版本号与JDk版本就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java修改maven的默认jdk版本为1.7的方法

    问题: 1.创建maven项目的时候,jdk版本是1.5版本,而自己安装的是1.7或者1.8版本. 2.每次右键项目名-maven->update project 时候,项目jdk版本变了,变回1.5版本或者其他版本 解决办法: 解决办法一:在项目中的pom.xml指定jdk版本,如下: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <ar

  • java 指定某个jdk版本方法

    java 指定某个jdk版本方法 指定某个jdk版本方法 背景:当我们在同一台机器上运行多个Java程序,但是所需的java版本不同,此时就需要在运行容器如tomcat中指定所需的jdk版本 jar文件方式 写启动脚本run.sh 内容如下: #!/bin/bash JAVA_HOME=/home/xinli/jdk1.8.0_92 JAVA=$JAVA_HOME/bin/java nohup $JAVA -jar yunnan-rest-service-0.1.0.jar -Djava.ext

  • Idea jdk版本问题解决方案

    问题描述: 解决: 检查以上是否版本一致. 不行就再检查下面的: 如果上面的方法还是不行的话,就建议你改一下pom文件中的maven插件编译级别,可以通过搜索所有的pom.xml,1.6这个关键词,就看出来了. <profiles> <profile> <id>jdk1.7</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.7<

  • 详解java接口(interface)在不同JDK版本中的变化

    JDK1.7以及以前: 接口(interface)在JDK7及之前的版本对接口的要求: 接口定义: 使用 interface 关键字 . 接口中的 所有 成员变量 都默认是由 public static final 修饰的. 接口中的 所有方法 都默认是由 public abstract 修饰的.也可以使用 protected ,但不能用 private . 接口中的 所有方法 都没有方法体. 接口没有构造方法.因为构造方法用于创建对象. 实现接口的类 必须提供接口中所有方法的具体实现内容. 可

  • 浅谈JAVA版本号的问题 Java版本号与JDk版本

    初学Java时便一直疑惑Java版本号到底是如何命名的?时常在网上看到Java5.Java6.Java7.Java8 (到今天已经到了Java12了,2019.4.5) 这一类 "Java X" 的Java版本名称,同时又会看到诸如JDK1.5.JDK1.6这中 "JDK1.X" 的JDK叫法. 一直以来都在纠结Java以及JDK的规范版本名称到底是如何,直到最近在几本书上看到了相关的解释才有点明白, 现总结在这里: 首先1996年发布了最初版本Java1.0(此前

  • 浅谈Java中ABA问题及避免

    本文主要研究的是关于Java中ABA问题及避免的相关内容,具体如下. 在<Java并发实战>一书的第15章中有一个用原子变量实现的并发栈,代码如下: public class Node { public final String item; public Node next; public Node(String item){ this.item = item; } } public class ConcurrentStack { AtomicReference<Node> top

  • 浅谈JVM之java class文件的密码本

    简介 机器可以读,人为什么不能读?只要我们掌握java class文件的密码表,我们可以把二进制转成十六进制,将十六进制和我们的密码表进行对比,就可以轻松的解密了. 下面,让我们开始这个激动人心的过程吧. 一个简单的class 为了深入理解java class的含义,我们首先需要定义一个class类: public class JavaClassUsage { private int age=18; public void inc(int number){ this.age=this.age+

  • 浅谈Java锁机制

    目录 1.悲观锁和乐观锁 2.悲观锁应用 3.乐观锁应用 4.CAS 5.手写一个自旋锁 1.悲观锁和乐观锁 我们可以将锁大体分为两类: 悲观锁 乐观锁 顾名思义,悲观锁总是假设最坏的情况,每次获取数据的时候都认为别的线程会修改,所以每次在拿数据的时候都会上锁,这样其它线程想要修改这个数据的时候都会被阻塞直到获取锁.比如MySQL数据库中的表锁.行锁.读锁.写锁等,Java中的synchronized和ReentrantLock等. 而乐观锁总是假设最好的情况,每次获取数据的时候都认为别的线程不

  • 浅谈Java中Unicode的编码和实现

    Unicode的编码和实现 大概来说,Unicode编码系统可分为编码方式和实现方式两个层次. 编码方式 字符是抽象的最小文本单位.它没有固定的形状(可能是一个字形),而且没有值."A"是一个字符,"€"也是一个字符.字符集是字符的集合.编码字符集是一个字符集,它为每一个字符分配一个唯一数字. Unicode 最初设计是作为一种固定宽度的 16 位字符编码.也就是每个字符占用2个字节.这样理论上一共最多可以表示216(即65536)个字符.上述16位统一码字符构成基

  • 浅谈java常量池

    java常量池技术 java中常量池技术说的通俗点就是java级别的缓存技术,方便快捷的创建一个对象.当需要一个对象时,从池中去获取(如果池中没有,就创建一个并放入池中),当下次需要相同变量的时候,不用重新创建,从而节省空间. java八种基本类型的包装类和对象池 java中的基本类型的包装类.其中Byte.Boolean.Short.Character.Integer.Long实现了常量池技术,(除了Boolean,都只对小于128的值才支持) 比如,Integer对象 Integer i1

  • 浅谈序列化之protobuf与avro对比(Java)

    最近在做socket通信中用到了关于序列化工具选型的问题,在调研过程中开始趋向于用protobuf,可以省去了编解码的过程.能够实现快速开发,且只需要维护一份协议文件即可. 但是调研过程中发现了protobuf的一些弊端,比如需要生成相应的文件类,和业务绑定太紧密,所以在看了AVRO之后发现它完美解决了这个问题. 下面记录下对这两种序列化工具的入门与测评. 一.protobuf基本操作 protobuf简介: Protocol Buffers (a.k.a., protobuf) are Goo

  • 浅谈Java工程读取resources中资源文件路径的问题

    正常在Java工程中读取某路径下的文件时,可以采用绝对路径和相对路径,绝对路径没什么好说的,相对路径,即相对于当前类的路径.在本地工程和服务器中读取文件的方式有所不同,以下图配置文件为例. 本地读取资源文件 java类中需要读取properties中的配置文件,可以采用文件(File)方式进行读取: File file = new File("src/main/resources/properties/basecom.properties"); InputStream in = new

  • 浅谈Java多线程处理中Future的妙用(附源码)

    java 中Future是一个未来对象,里面保存这线程处理结果,它像一个提货凭证,拿着它你可以随时去提取结果.在两种情况下,离开Future几乎很难办.一种情况是拆分订单,比如你的应用收到一个批量订单,此时如果要求最快的处理订单,那么需要并发处理,并发的结果如果收集,这个问题如果自己去编程将非常繁琐,此时可以使用CompletionService解决这个问题.CompletionService将Future收集到一个队列里,可以按结果处理完成的先后顺序进队.另外一种情况是,如果你需要并发去查询一

随机推荐