大家都知道电脑的操作系统是由汇编和C语言写出,因此操作系统无法直接识别其他语言。这时我们就需要添加一个(翻译)编译环境,将其他语言(翻译)编译为操作系统能够识别的语言。
Java为我们提供了一个很好的
当我们在电脑编译Java语言时就需要借助一个翻译的平台-----可跨系统的----JDK。
编译过程大致为:
java源程序—>JDK把java翻译成.class—>jre(JDK中包含jre)运行.class文件解释为中间代码—>送给操作系统(C语言识别、汇编语言识别)—>转变为二进制
下面是根据我的理解制作的流程图:
以Windows系统为例
JDK把.java文件翻译成.class文件—>jre运行.class文件—>送给操作系统识别—>汇编语言识别—>转变为二进制,机器进行操作
JDK是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm(真正对java进行翻译的),lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。
一、什么是JDK
通俗来说:JDK 是整个JAVA的核心,包括了Java运行环境,一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
JDK是java开发工具包,我们学java都会先在机器上装一个JDK,JDK目录下面有六个文件夹:一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的 是以下四个文件夹:bin、include、lib、 jre。其中JDK包含JRE,而JRE包 含JVM。
bin:最主要的是编译器(javac.exe)
include:java和JVM交互用的头文件
lib:第三方类库的存放
jre:java运行环境
总的来说JDK是用于java程序的开发编译,而jre则是为运行 .class文件提供环境 而没有编译功能。
二、什么是JRE
通俗来说:JRE是指java运行环境,包含JVM及Java核心类库。 我们编写的Java程序必须要借助JRE才能运行,光有JVM还不能完成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。(jre里有运行.class的java.exe)
三、什么是JVM
JVM(Java Virtual Machine),即java虚拟机,为 java运行时的环境制定规则,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。针对java用户,也就是拥有可运行的.class文件包(jar或者war)的用户。里面主要包含了jvm和java运行时基本类库(rt.jar)。rt.jar可以简单粗暴地理解为:它就是java源码编译成的jar包。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。
四、JDK、JRE、JVM三者的联系与区别
1.三者联系:
JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和
lib和起来就称为jre。 JVM+Lib=JRE。
总体来说就是,我们利用JDK开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码(.class文件),在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
JDK把java翻译成.class—>jre运行.class—>送给操作系统识别—>C语言识别—>汇编语言识别—>转变为二进制
2.三者区别:
(1)JDK和JRE区别: 在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。
(2)JRE和JVM区别: JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。
(3)JVM和JRE区别: JVM定义执行规则,JRE按照规则执行。
五、相关理解
不使用eclipse编辑器也可以通过记事本写java并成功运行,只要有对应的运行环境即可,只是eclipse为我们提供了便捷。
脚本语言:vb(window系统自带识别环境)、shell(Linux系统自带识别环境)
js(自带浏览器识别)
脚本语言操作系统本身也是并不识别,只是操作系统提前配置了识别环境,我们只需要通过记事本编辑,完成后更改后缀名就可以运行。所以我们认为不需要进行编译可以直接在操作系统执行的就是脚本语言。