• JRE:Java Virtual Machine 的简称,Java 虚拟机,它的作用就是能将.class文件转成计算机能识别的机器码,以供计算机执行。
• JRE:Java Runtime Environment 的简称,Java 运行环境,顾名思义,如果我们想要运行一个Java程序,那么JRE是必不可少的。
• JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境,从事Java开发人员用的开发包,里面包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具 。
他们的包含关系如下 : JDK>JRE>JVM
那么我们又可以延伸出新的问题: 什么是.class文件?
首先我们来普及一个计算机的基础知识
计算机程序的运行:
计算机其实很笨,笨到只能认识特定的机器码,而底层是二进制数字信号的传输。
所以我们写的什么类啊,方法啊,在计算机眼里只是看都看不懂的天书。那么我们如何让计算机执行我们的代码呢?
JVM出场了,它能将编译后的.class转成机器码以供计算机读取执行。
我刚开始接触Java的时候也是云里雾里,咦,我们写的不是.java文件吗,怎么又变.class文件了。
这都是javac编译器的功劳,它能将java文件编译成class文件,再交由虚拟机解释执行。
为什么Java语言可以一次编译 到处运行?
JVM是Java跨平台运行的核心 。我们知道,不同的操作系统上的 API 肯定是不同的,那么如果我们想要写一段代码调用系统的API,就需要针对不同系统的 API 写出不同的代码来完成动作。
Java 引入了字节码(就是.class文件)的概念,jvm 只能认识字节码,并将它们解释到系统的 API 调用。针对不同的系统有不同的 jvm 实现,有 Linux 版本的 jvm 实现,也有 Windows 版本的 jvm 实现,但是同一段代码在编译后的字节码是一样的。同一段字节码,在不同的 jvm 实现上会映射到不同系统的 API 调用,从而实现代码的不加修改即可跨平台运行。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
表达有误的话请大家指教,大家共同探讨学习!!! fighting !!
附上一段摘抄的文字:
我曾七次鄙视自己的灵魂:
第一次,当它本可进取时,却故作谦卑;
第二次,当它在空虚时,用爱欲来填充;
第三次,在困难和容易之间,它选择了容易 ;
第四次,它犯了错,却借由别人也会犯错来宽慰自己;
第五次,它自由软弱,却把它认为是生命的坚韧 ;
第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。
----卡里·纪伯伦