“一次编译,到处运行”是java语言跨平台的特性,平台指的是操作系统平台。
程序从源代码到运行的三个必经阶段:编码——编译——运行,调试。
首先编码阶段,需要编码语言是一个程序设计语言,而我们的java是程序设计语言
接来到编译阶段,我们来看看java的编译过程:
分解过程:
第一步:由编译器把Java源代码(.java文件)--->.class文件字节码,这是java的第一次编译。生成的这个.class文件就是可以到处运行的文件。
第二步:.class文件字节码--->到目标机器代码;执行是由JVM执行引擎来完成,这是java的第二次编译。
编译阶段完成后就是运行,调试阶段(集成开发环境(IDE)),程序的运行阶段是在一个特定的平台上,由这个平台来执行编译生成的程序。
-------------------------------------------------------------------------------------------------------------------------
了解了程序从源代码到运行的三个必经阶段的内容,下面我们来说下“一次编译,到处运行”是什么意思:
“一次编译”:一次编译是把编译阶段宏观的看成一次编译
“到处运行”:
“到处运行”就是跨平台。
到处运行的隐含条件——这里的“到处”的前提是“装有JVM”。
java的跨平台特性和jvm虚拟机的存在密不可分。jvm虚拟机可以使java语言在不同的环境中运行。
因为第二次编译就是在JVM中执行的,也就是在任何一个装有“JVM”的操作系统中完成的。JAVA提供了各种不同平台上的虚拟机制,所以可以实现“到处”。
-------------------------------------------------------------------------------------------------------------------------
注意:java并不是编译机制,而是解释机制。
看过了JAVA的两次编译,不要以为JAVA是编译机制,在java中有第一次编译,还有第二次解释来适应不同平台;根据不同的平台进行解释执行。在JVM中的第二次编译过程中(从字节码向机器码转换过程中)真正采用的是“解释”机制。即翻译一句,执行一句,不产生整个的机器代码程序。翻译过程如果不出现错误,就一直进行到完毕,否则将在错误处停止执行。
同一个程序,如果是解释执行的,那么它的运行速度通常比编译为可执行的机器代码的运行速度慢一些。但是,对Java来说,二者的差别不太大。
-------------------------------------------------------------------------------------------------------------------------
延伸知识:
JDK、JRE、JVM的区别和联系_大神神奇奇的博客-CSDN博客
-------------------------------------------------------------------------------------------------------------------------
说明:本篇内容有一部分内容出自这篇博客Java为什么可以一次编写,到处运行?_csdn_life18的博客-CSDN博客