Java常识(JDK,JAVA SE,JAVA版本,跨平台原理)

前言

今天看到自己JAVA目录下的环境,里面有一个jdk1.6.0,还有一个jdk-12.jdk,我顿时就不知道谁是谁了,于是借此整理一下Java相关的一些名词的具体作用和相关关系。

1. JDK、JRE、JVM

1.1 JDK

JDK,也就是Java Development Kit,好吧那是曾经,现在是Java SE Development Kit,即Java标准版开发包。它包括了Java的运行环境(JRE)和Java工具(也就是编译器Javac之类的)。

1.2 JRE

JRE,也就是Java Runtime Environment,即Java运行环境,它包括了Java虚拟机(JVM)以及运行虚拟机所需要的一些环境。

1.3 JVM

JVM,也就是Java Virtual Machine,即Java虚拟机,一个抽象的计算机,它和实际的计算机一样,具有指令集并使用不同的存储区域。负责Java程序的运行。

1.4 三者的关系

差不多这样的关系,意会即可。
包含的关系

2. Java SE,EE,ME

1998年,在发布Java2的时候,伴随着JDK1.2以外,还有JSP/Servlet,EJB等规范,Java由此被分为了J2SE,J2EE和J2ME三个部分。
随着版本的更新,J2SE中的2逐渐开始失去意义。于是从Java5开始,又开始更名为Java SE,Java EE,Java ME。可以把两者认为是同一个事物。

2.1 Java SE

Java SE也就是 Java Platform, Standard Edition,即标准版Java。是Java的标准版部分,为其他两种Java提供基础。

  • 简单来说,我们平时说到的JDK,JRE,JVM啥的,全部都默认是Java SE的内容。

2.2 Java EE

Java EE也就是 Java Platform, Enterprise Edition,即企业版Java。企业版Java没有对应和开发包和开发环境(也就是说没有JDK JavaEE版本,JDK就是指Java SE Development kit),Java EE提供了JSP/Servlet,EJB等规范,然后由其他人来开发对应的SDK。

  • Java EE负责服务器端,主要是做服务器端Java应用程序。
  • 我们平时说的servlet,JDBC,Jsp,SSH等都是属于Java EE的范畴。
  • Java EE的SDK是谁来负责的:从开发角度来说,开发JavaEE只需要jsp-api.jar 和 servlet-api.jar,而提供这两个包的不是Java官方而是Web容器,也就是说是Tomcat、Jetty、JBoss之类的服务器提供。
  • 2018年3月,开源组织Eclipse基金会宣布,Java EE(Enterprise Edition)被更名为Jakarta EE。

2.3 Java ME

Java ME也就是Java Platform, Micro Edition,即Micro版Java(百度了半天就找到这个名字)。Java ME主要为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台,包括虚拟机和一系列标准化的Java API。

3. Java的版本号

刚刚的关系都讲完了,那么JavaX和JDK1.X和JavaX.0又有什么关系。看完这个Java发布的历史表格,你就知道到底是怎么一回事了。

JDK版本时间备注
JDK1.01995第一版本Java(除去Oak版本外)
Sun公司开发
JDK1.11997增加了JIT编译器
JDK1.21998-12分成了J2SE、J2EE、J2ME
JDK1.32000-5
JDK1.42002-2最成熟的版本,发展特别快
JDK1.5/Java SE 52004-10JDK1.5被改名为Java SE5.0
同时还有相应改名的Java EE,JAVA ME
JDK1.6/Java SE 62006-12
JDK1.7/Java SE 72011-7-28Sun公司于2009-4-20被Oracle收购
JDK1.8/Java SE 82014-3-28加入Lambda表达式
JDK9.0/Java SE 92017-9-22从这个版本开始就不是1.X了,就直接X.0
不过你喊1.9大家也都知道是谁
JDK10/Java SE 102018-3
JDK11/Java SE 112018-9
JDK12/Java SE 122019-3

这么一看就明白了,Java8(也就是Java SE 8),JDK1.8,JDK8.0说白了就是同一个东西。

3.1 推荐用LTS版本

Oracle公司约定:每三年会发布一个长期技术支持(LTS,Long-Term-Support)的版本,Java8和Java11是LTS版本,而Java9和Java10只是功能性版本,只有半年的技术支持。

  • 从2019年1月开始,Oracle公司停止免费提供Java8的商业版更新。
  • 从2020年12月开始,Oracle公司停止免费提供Java8的个人版更新。
  • 停止免费更新后,付费可以获得后续的更新,不付费之前的免费版本也可以继续使用。
    停止公共更新计划

4. Java跨平台的原理

4.1 机器码和字节码

  • 机器码(machine code):计算机的CPU可以直接解读并执行的语言。
  • 字节码(byte code):是一种包含执行程序,由一序列 op 代码/数据对组成的二进制文件,是一种中间码

4.2 Java的工作模式

那么,无论是怎样的计算机(无论是Linux还是Windows还是Unix或者是什么别的系统),只要将我们写的代码翻译成机器码就好了。问题对于不同的计算机,他们所用的机器码的不一样。
这个时候我们就使用中间码,将我们写的Java源代码,翻译成中间码,再由中间码根据不同的计算机系统,来翻译成不同的模板就好。
Java跨平台原理
简单的举一个例子,你的笔记本,上面只有一个雷电3的接口。你去外接显示屏A,但是显示屏A是HDMI的接口,那你肯定就需要一个USB-C转HDMI的转接头;你去外接显示屏B,B是VGA接口,你需要一个USB-C转VGA的转接头。
而Java语言中,JVM就是这个转接头,它根据不同的平台,准备了不同的解释方法。
所以在不同的平台中,只要换一个对应的JVM,Java程序就又可以继续运行了。

4.3 解释型语言和编译型语言

Java语言是一种解释语言,它会根据不同的平台准备不同的解释方法,这才实现了跨平台的功能。再来看看另一种语言:编译语言的工作原理。C语言
编译型语言的特点:一次编译,直接机器码,然后运行。
所以在这一步上它比解释型语言少了一步解释的动作,运行速度会更快,但是相对的,它不能同时在多个平台上运行。

参考材料

为什么JDK是 javaSE,有javaEE的包吗 - 百度贴吧
https://tieba.baidu.com/p/5859817941?red_tag=0438489063
听说Java8和java11要收费了?程序员还有没有活路了 - CSDN
https://blog.csdn.net/cowcomic/article/details/82922933
Java8与JDK1.8与JDK8之间的关系是什么? - CSDN
https://blog.csdn.net/qq_42926870/article/details/101110522
Java跨平台原理 - CSDN
https://blog.csdn.net/Faker_Wang/article/details/80922167
编译型语言和解释型语言(包含两者区别)- C语言中文网
http://c.biancheng.net/view/4136.html
还有各种各样的百科 - 百度百科

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值