JAVA中JDK与JRE的区别

  1. 定义
    这里写图片描述
    从上图我们已经可以简单的看出JDK和JRE的区别。
    JRE(Java Runtime Enviroment)是Java的运行环境。面向Java程序的使用者,而不是开发者。如果你仅下载并安装了JRE,那么你的系统只能运行Java程序(安装过程中会自动添加PTAH)。JRE是运行Java程序所必须环境的集合,包含JVM标准实现及Java核心类库。它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。
    JDK(Java Development Kit)是Java开发工具包,它提供了Java的开发环境(提供了编译器javac等工具,用于将java文件编译为class文件)和运行环境(提供了JVM和Runtime辅助包,用于解析class文件使其得到运行)。如果你下载并安装了JDK(需要配置环境变量),那么你不仅可以开发Java程序,也同时拥有了运行Java程序的平台。JDK是整个Java的核心,包括了Java运行环境(JRE),一堆Java工具tools.jar和Java标准类库(rt.jar)。
  2. JDK下的jre和主目录下的jre
    安装JDK的时候我们配置了环境变量,jdk、bin目录下包含了所有的命令。但是我们用的java命令并不是jdk/bin目录下的而是jre/bin目录下的。验证的方法很简单:将jdk/bin目录下的java命令删除掉,还是可以运行java程序,这是因为安装jre的时候安装程序自动把java.exe添加到系统变量中(也就是可以在Windows/system32中找到)。这也解释了很多电脑没有配置环境变量也可以运行java程序的原因(因为它们有jre)。
    安装JDK之后我们会发现两个jre文件夹一个在jdk文件夹下,一个在java文件夹下,如下图所示:
    这里写图片描述
    这里写图片描述
    为什么有两套jre呢?这是因为JDK里面有很多用Java所编写的开发工具(如javac.exe、jar.exe等),而且都放置在/lib/tools.jar里。如果我们将tools.jar改名为tools1.jar,然后运行javac.exe,显示如下结果:Exception in thread “main” java.lang.NoClassDefFoundError: com/sun/tools/javac/Main。这个意思是说,你输入javac.exe与输入java -cp c:/jdk/lib/tools.jar com.sun.tools.javac.Main 是一样的,会得到相同的结果。从这里我们可以证明javac.exe只是一个包装器(Wrapper),而制作的目的是为了让开发者免于输入太长的指命。而且可以发现/lib目录下的程序都很小,不大于29K,从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写,所以也是Java应用程序,因此要使用JDK所附的工具来开发Java程序,也必须要自行附一套JRE才行,所以位于JDK目录下的那套JRE就是用来运行一般Java程序的。
    我们安装了JDK,运行java程序到底是使用jdk下的jre还是java下的jre呢?这个重大任务就落在java.exe身上。java.exe的工作就是找到合适的JRE来运行Java程序。java.exe依照以下的顺序来查找JRE:1)自己的目录下有没有JRE;2)父目录有没有JRE;3)查询注册表:[HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment]。所以java.exe的运行结果与你的电脑里面哪个JRE被执行有很大的关系。
    这里写图片描述
    从注册表中我们可以发现java程序使用的是java目录下的jre。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值