有一天,小明和小红在外面打《阴阳师》,打到一半手机没电了,充电器也没有带。小红想让小明继续玩,小明只好去网吧打《阴阳师》。
来到网吧,小红改主意了,想玩《王者荣耀》。
小明在网吧电脑上面安装了安卓模拟器,又在模拟器里面下载《王者荣耀》,这样他就可以用电脑打《王者荣耀》了。
但是好巧不巧,小明在快安装完模拟器的时候出现Bug,图标找不到了。这样即便模拟器安装好也无法启动。小明很着急,因为他还要带妹。
好在小明对电脑有所了解,他打开电脑桌面,找到模拟器安装所在系统盘的位置,创建桌面快捷方式并打开模拟器。
模拟器终于能用了,到了登录界面,小明再一次傻眼。因为小明只有网易账号,没有QQ账号,而《王者荣耀》需要拥有QQ账号才能登录。小明只好注册一个QQ账号。
现在《王者荣耀》总算能玩了,小明和小红愉快地度过了一个下午。
小明为了带妹,不辞辛苦去网吧使用安卓模拟器尝试自己从来没有玩过的游戏,所以小明的付出是值得的。
回归正题,JRE(Java运行环境)和JVM(Java虚拟机)就是这样一种关系。虽然小明在电脑里安装了安卓模拟器(JVM),但是没有图标(Java运行工具)也无法正常打开,而且想玩《王者荣耀》(执行Class文件)还有前置条件,那就是需要使用QQ进行登录(Java核心类库)。
JVM、Java核心类库和Java运行工具共同组成了JRE。
可以说,有了安卓模拟器和能够玩《王者荣耀》是两个概念。小明需要先安装模拟器(JVM),其次通过图标启动模拟器,再打开《王者荣耀》,最后登录账号。
这一套流程称为JRE。
通过这一次操作,小明以后不仅可以玩《王者荣耀》,还能够玩《和平精英》和《LOL》,因为他们都基于QQ账号登录。
至于JDK(Java开发工具),再举一个小例子。
小明开了一间早餐店,小明每天会去菜场买好许多早餐原料,比如各种做饺子的馅料和面粉,把他们做成生蒸饺,再放进蒸笼,但是还需要打开煤气灶才能开始蒸饺子。
小明准备馅料(Java源码编写的Java文件)包饺子(Java编译工具编译的Class文件),在准备馅料的过程中经常需要加入一些调料(Java调试工具)让馅料更完美,之后放进蒸笼(JVM虚拟机),在下面盖上一层蒸笼布(Java核心类库),打开灶台(Java运行工具),最后蒸出一笼美味的饺子(执行Class文件)。
这么一套从开发(做饺子)到运行(蒸饺子)的流程的统称就叫JDK,里面包含了JRE(蒸饺子的过程),其中JRE又包含了JVM(蒸笼)。
如果小明不开早餐店也不包饺子,只是从其他早餐店买好生饺子,直接带回家蒸呢?这样只需要蒸笼和灶台就可以了。
同理,如果只是在别人的电脑上单纯运行Java项目,就不用安装JDK,只需要安装JRE就行。