JDK
Java Development Kit(Java开发工具包),提供了Java的开发环境和运行环境。包含Java源文件的编译器Javac,还有调试和分析工具。
JRE
Java Runtime Environment(Java运行环境)包含了Java虚拟机(JVM)和一些基础类库。
JVM
Java Virtual Machine(Java虚拟机),提供执行字节码文件的能力。
所以如果只是运行Java程序,只要安装了JRE都可以运行。
注:但是JVM本身不是跨平台的,JVM是实现Java跨平台的核心,不同的平台需要安装不同的JVM。
Java源文件运行过程
如下图解:
也就是说 .java文件先经过编译,生成 .class字节码文件,最后才在JVM上运行的,但是JVM本身不跨平台,所以不同版本的JVM才可以运行在不同的操作系统上。(如果深入JVM的内部结构还是很复杂的,本文只是简单介绍一下JVM)
跨平台性
Java源文件编写之后(比如编写一个Hello World源文件)然后经过编译,生成字节码文件,此时的字节码文件是符合一定的规范,符合一定的规范程序才能在JVM上跑起来,也就是说我只有这么一份Java源文件,经过编译之后,我可以跑在Windows上,也可以跑在Linux上。
但是注意上图的图解:程序运行并不是直接在Windows或者Linux上就跑起来了,而是要借助JVM(Java虚拟机),所以所谓的跨平台是指Java源文件生成的字节码文件(.class文件)是跨平台的;但是本身的JVM是不跨平台的。
如上图图解:字节码文件是需要不同版本的Java虚拟机才能把字节码文件翻译成不同的操作系统的机器码的。(有一个编译以及翻译的过程)
跨语言性
还是看上图的图解,我们以为JVM(Java虚拟机)就只能跑Java的语言,但是实际上编译生成的字节码文件只是起到了规范的作用,只要你开发其他的语言是符合我 .class字节码文件的规范(不一定只是Java语言),就可以在JVM上运行。
也就是所谓的“ 某种某种语言 ” 也是属于Java虚拟机体系的语言,只要符合字节码文件的规范,此时不同的开发语言就可以跑在 不同的平台(操作系统)了。
本文是总结的网上风清扬大佬的面试题~