JDK和JRE到底是什么,JDK和JRE的区别,JAVA EE 和 JAVA SE的区别

 

一、Java是什么

Java是什么,大家好像觉得这不是一个问题,Java就是一门面向对象的编程语言呗。Java是一门编译语言不假,但实际上它的价值早已超过作为一门语言那么简单了,客观上说,它已经逐渐演变成了一个技术体系,一个提供了完整的用于日常跨平台开发和跨平台部署的技术体系。

二、Java技术体系

1.Java技术体系组成

Java技术体系都包括什么呢,我们先想一想一个Java程序的执行过程,当我们编辑并运行一个Java程序时,首先需要使用文字编辑软件或集成开发环境在Java源文件中定义不同的类(.java文件),然后在这些类中书写给人看的代码,接着我们需要把源文件编译生成一种二进制中间码,存储在class文件中(.java文件被编译成了给虚拟机看的.class字节码文件),然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java API调用,如果需要,我们还可能引入调用第三方提供的JavaAPI。

所以,我们可以总结一下,Java技术体系大致应该包括:Java编程语言(起码可以叫人编码开发)丰富的Java类库API(毕竟大部分程序员都喜欢找封装好的API拿来就用,另外个人感觉也是提供了一个较为统一的API规范)Class文件格式(人来开发,但是还需要一个翻译给翻译成虚拟机能看懂的字)Java虚拟机(废话,真正干活的就是它)。比较官方的说法由JCP(Java Community Process的简写,是一个开放的国际组织,主要由Java开发者以及被授权者组成,职能是发展和更新)提出的定义Java技术体系包括以下几部分:

  • Java程序设计语言
  • Java虚拟机
  • Class文件格式
  • Java类库API(其中可以包括Java本身的API和第三方Java类库API)

2.Java技术体系组成划分

(1)对于Java技术体系,如果我们按照各个组成部分的功能来划分的话,还可以将其分为两大部分:JDKJRE

JDK(Java Development Kit):直接翻译过来就是Java开发工具包,JDK是用于支持Java程序开发的最小环境。简单说就是程序员日常开发需要的一个环境,那么我们日常开发需要什么呢?Java程序设计语言、Java虚拟机、Java类库,以上三个便是组成JDK的必要部分。

截自Jdk 8 中的 README 自述文件

JRE(Java Runtime Environment):直接翻译过来就是Java运行时环境。当我们对一个类或一个系统开发完毕,将其编译成字节码或打成jar包时,这时候我们的任务就完成了,接下来运行程序的话需要Java虚拟机运行,虚拟机在运行程序的时候还需要一些基础类库。所以JRE由Java虚拟机和Java类型API组成(这里细说的话,其实是Java SE中的所有类库)。

截自Jre 8 中的 README 自述文件
总结:
1.JDK = JRE + Java开发工具
2.你要想开发的话需要JDK,如果你只是想运行一个编译好的.class文件时,只需要JRE

说道这里,我们再一起看看当我们在操作系统(以windows举例)安装了JDK之后,安装文件夹下边都有些什么东西。

当然,这是我早就装好了的,可以看到包含jdk和jre两个文件夹。那先看看jdk中都有些什么:

一个个的分别来说一下,bin目录里面存放了JDK的各种工具命令即JDK开发工具的可执行文件其中这些可执行文件都是二进制的,其中包括编译器、解释器以及其他一些工具,比如我们刚开始用的Javac、Java命令去检查JDK是否安装配置正确就是在这个目录下面的命令。bin目录下的内容如下图:

include目录里面是一些供C语言使用的标题文件,其中C语言的头文件支持Java本地接口和Java虚拟机调试程序接口的本地编程技术。这里头文件的作用是让Java调用C/C++实现的函数功能。include目录下的内容如下:

jre目录路径下安装的就是运行Java程序所必须的JRE环境。我们可以看到在jre目录下的bin里面有java.exe、javaws.exe,但没有javac.exe。jre目录下的内容如下:

lib目录:该路径下存放的是JDK工具命令的实际执行程序。lib目录下的内容如下:

src.zip目录:该压缩文件里面存放的就是Java所有核心类库的源代码。src.zip目录解压内容如下:

那么和jdk同级的jre文件下有什么呢,内容如下:

好像和jdk文件夹下的jre的内容一样。诶?等等,为什么已经有个单独的jre文件夹,jdk里还要加个jre问价夹呢?jdk文件夹下的jre和与jdk同级的jre有什么区别呢?接下来我们先说说这个。

其实jdk里面的jre一般用于运行java本身的程序,比如javac等可执行程序,而和jdk同级的jre是用于运行用户编写的java程序。简单来说就是JDK里的工具几乎是用Java所编写,所以也是Java应用程序,因此要使用JDK所附的工具来开发Java程序,也必须要自行附一套JRE才行。那么当在执行java.exe的时候,怎么知道要使用哪个jre呢,操作系统寻找JRE的方式如下:

  • 先找当前目录下有没有JRE
  • 再找父目录下有没有JRE
  • 接着在PATH路径中找JRE
  • 注册表HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\ 查看CurrentVersion的键值指向哪个JRE

所以,当执行jdk\bin\java.exe的时候,用的jre是bin的父目录jdk下面的jre,而运行\jre\bin\java.exe的时候,用的则是与jdk同级的jre,并且当java.exe找到了对应的jre之后还有一个验证程序,验证jre和java.exe的版本是否一致,如果不一致也会发生错误。这也是我们在安装JDK时会在操作系统的环境变量里配置Path。当我们在之后文章中了解了jvm之后,在将java代码整个的运行过程串一遍,会清晰很多。

(2)言归正传,如果按照技术服务的领域或者按照技术关注的重点业务来划分,Java技术体系可以分为以下几个产品线:

  • Java Card:支持Java小程序(Applets)运行在小内存设备(如智能卡)上的平台。
  • Java ME(Micro Edition):支持Java程序运行在移动端的平台,及JDK6之前的J2ME,虽然Android主要使用Java语言开发,但是Android并不是属于Java ME的。
  • Java SE(Standard Edition):支持桌面级应用的Java平台,提供了完整的Java核心API,比如java.*包下的API,另外这也是为什么说组成JDK的Java类库API来自于Java SE了。
  • Java EE(Enterprise Edition):支持使用多层架构的企业应用的Java平台,除了包括Java SE的API之外,还做了大量针对性的扩充,比如javax.*包下的API。

网络上普遍认为javaME就是用来开发嵌入式的,javaSE就是用来开发桌面的,javaEE就是用来开发企业端的。这也许没错,但是为什么我们采用SSH框架和SSM框架的时候使用的是javaEE的技术,为什么下载的是jdk就可以了呢。

  • JDK不分ME,SE,EE,他们都是对Java即JDK的一种封装和规范。

  • 下面引自: http://javaligang.blog.51cto.com/5026500/1825681
    Java刚开始的时候,因为各种应用和生态不成熟,很多东西需要有人牵头制定强制规范引导Java的发展,于是Java EE曾经引领了企业级应用的开发。
    但随着时代的进步,以及越来越多的公司和组织参与到Java世界,出现了各种各样的Java EE组件的代替者,比如Hibernate、Spring就是其中两个典型。相反,Java官方制定的各种Java EE规范反而不太受欢迎,他们制定了JSF规范,但实际企业开发喜欢用Struts 2、Spring MVC;他们制定了EJB规范,但实际企业开发往往还是喜欢用Spring;他们制定了JPA规范,但实际企业开发往往还是喜欢直接用Hibernate、MyBatis。
    现代企业级应用常用的各种框架和工具,比如Struts 2、Spring、Hibernate、jBPM、Activiti、Lucene、Hadoop、Drools、CXF等这些大家耳熟能详的组件,全部都不是来自Oracle官方,但是却在企业应用中开发经常用到的。
    现在企业里面,真正常用的Java EE规范有什么?Servlet、JSP、JMS、JNDI。这些技术都只是充当了一个程序的入口而已。
    Oracle之所以可能考虑放弃Java EE,正体现了Oracle对丧失Java控制权的无奈。企业的本质是逐利,Oracle每年为制定Java EE规范投入不少人力、财力,但制定的规范最终并没有获得市场的青睐,所以Oracle可能放弃这种吃亏不讨好的事情。
    但Java不同,2016年6月,Java在商业语言排行榜上的市场份额将近21%,庞大到恐怖的市场份额,背后隐藏着巨大各种专利使用费和盈利商机,任何一个理智的公司都不会放弃这个会下金蛋的母鸡。

由此可见,oracle上提供的java EE是官方指定的javaEE规范,里面都是符合官方指定的javaEE组件,我们用SSM,SSH开发后台时使用到的只有Servlet、JSP、JMS等少量的java EE规范,没有必要使用orcale提供的java EE版本,直接使用jdk就可以当然还需要maven等管理第三方的jar包来实现功能。所以,无论是JavaEE还是JavaSE都只是oracle将自己的JDK再次封装,提供的一个比较成熟的解决方案或标准,类似于Spring,只不过是Java EE变得越来越被动。

 

附:下面为一个较为完整的Java技术体系所包含的内容的图:

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaSE JDK & JRE合集 链接:https://pan.baidu.com/s/1eUixr82 包含内容: Java SE Development Kit 9.0.4 Linux 305.07 MB jdk-9.0.4_linux-x64_bin.rpm Linux 338.21 MB jdk-9.0.4_linux-x64_bin.tar.gz macOS 382.11 MB jdk-9.0.4_osx-x64_bin.dmg Windows 375.56 MB jdk-9.0.4_windows-x64_bin.exe Server JRE (Java SE Runtime Environment) 9.0.4 Linux 57.14 MB serverjre-9.0.4_linux-x64_bin.tar.gz Windows 50.07 MB serverjre-9.0.4_windows-x64_bin.tar.gz Java SE Runtime Environment 9.0.4 Linux 59.79 MB jre-9.0.4_linux-x64_bin.rpm Linux 83.01 MB jre-9.0.4_linux-x64_bin.tar.gz macOS 75.79 MB jre-9.0.4_osx-x64_bin.dmg macOS 71.14 MB jre-9.0.4_osx-x64_bin.tar.gz Windows 96.62 MB jre-9.0.4_windows-x64_bin.exe Windows 72.56 MB jre-9.0.4_windows-x64_bin.tar.gz --------------------------------------------------------------------------------------- Java SE Development Kit 8u162 Linux x86 169.01 MB jdk-8u162-linux-i586.rpm Linux x86 183.81 MB jdk-8u162-linux-i586.tar.gz Linux x64 166.13 MB jdk-8u162-linux-x64.rpm Linux x64 181.02 MB jdk-8u162-linux-x64.tar.gz macOS 247.12 MB jdk-8u162-macosx-x64.dmg Windows x86 198.57 MB jdk-8u162-windows-i586.exe Windows x64 206.76 MB jdk-8u162-windows-x64.exe Java SE Development Kit 8u162 Demos and Samples Windows x64 53.86 MB jdk-8u162-windows-x64-demos.zip Server JRE (Java SE Runtime Environment) 8u162 Linux x64 52.26 MB server-jre-8u162-linux-x64.tar.gz Windows x64 48.75 MB server-jre-8u162-windows-x64.tar.gz Java SE Runtime Environment 8u162 Linux x86 63.44 MB jre-8u162-linux-i586.rpm Linux x86 79.33 MB jre-8u162-linux-i586.tar.gz Linux x64 60.44 MB jre-8u162-linux-x64.rpm Linux x64 76.4 MB jre-8u162-linux-x64.tar.gz macOS 74.18 MB jre-8u162-macosx-x64.dmg macOS 65.86 MB jre-8u162-macosx-x64.tar.gz Windows x86 Offline 61.36 MB jre-8u162-windows-i586.exe Windows x86 64.58 MB jre-8u162-windows-i586.tar.gz Windows x64 Offline 68.27 MB jre-8u162-windows-x64.exe Windows x64 68.58 MB jre-8u162-windows-x64.tar.gz --------------------------------------------------------------------------------------- Java SE Development Kit 7u80 Linux x86 130.44 MB jdk-7u80-linux-i586.rpm Linux x86 147.68 MB jdk-7u80-linux-i586.tar.gz Linux x64 131.69 MB jdk-7u80-linux-x64.rpm Linux x64 146.42 MB jdk-7u80-linux-x64.tar.gz Mac OS X x64 196.94 MB jdk-7u80-macosx-x64.dmg Windows x86 138.35 MB jdk-7u80-windows-i586.exe Windows x64 140.09 MB jdk-7u80-windows-x64.exe Java SE Runtime Environment 7u80 Linux x86 31.63 MB jre-7u80-linux-i586.rpm Linux x86 46.31 MB jre-7u80-linux-i586.tar.gz Linux x64 32.14 MB jre-7u80-linux-x64.rpm Linux x64 44.93 MB jre-7u80-linux-x64.tar.gz Mac OS X x64 48.66 MB jre-7u80-macosx-x64.dmg Mac OS X x64 44.61 MB jre-7u80-macosx-x64.tar.gz Windows x86 Offline 28.14 MB jre-7u80-windows-i586.exe Windows x86 40.06 MB jre-7u80-windows-i586.tar.gz Windows x64 29.79 MB jre-7u80-windows-x64.exe Windows x64 41.77 MB jre-7u80-windows-x64.tar.gz Server JRE (Java SE Runtime Environment) 7u80 Linux x64 91.48 MB server-jre-7u80-linux-x64.tar.gz Windows x64 87.92 MB server-jre-7u80-windows-x64.tar.gz

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值