“一次编译、处处运行”说的是Java语言跨平台的特性,简单地来说,Java的跨平台特性与Java虚拟机的存在密不可分,可在不一样的环境中运行。好比说Windows平台和Linux平台都有相应的JDK,安装好JDK后也就有了Java语言的运行环境。其实Java语言自己与其余的编程语言没有特别大的差别,并非说Java语言能够跨平台,而是在不一样的平台都有可让Java语言运行的环境而已,因此才有了Java一次编译,处处运行这样的效果。java
严格的讲,跨平台的语言不止Java一种,但Java是较为成熟的一种。了解编程的同窗都知道“语言处理程序”,其实就是编译器。“一次编译,处处运行”这种效果就跟这个编译器有关。程序员
首先来看编码阶段,即便用编程语言来写程序,但程序写完以后是不能直接运行的,还要进行下一个阶段的处理,即编译阶段,对于编程语言的处理须要编译器和解释器。它的意义在于把程序设计语言翻译成目标语言。也就是说,编程语言并非计算机能够直接识别的语言,因此还须要一个“翻译官”来进行翻译。Java虚拟机和DOS相似,至关于一个供程序运行的平台。还记得咱们在初学Java时用记事本写的简易程序吗?
在以上的讲解中已经提到程序从源代码到运行的三个阶段:编码——编译——运行——调试。这也是高级语言的一种共同特征。Java除了面向对象这一特征外,在编译阶段则体现了跨平台的特色。尚学堂•百战程序员陈老师指出编译过程大概是这样的:首先是将Java源代码转化成.CLASS文件字节码,这是第一次编译。.class文件就是能够处处运行的文件。而后Java字节码会被转化为目标机器代码,这是是由JVM来执行的,即Java的第二次编译。编程
“处处运行”的关键和前提就是JVM。由于在第二次编译中JVM起着关键做用。在能够运行Java虚拟机的地方都内含着一个JVM操做系统。从而使JAVA提供了各类不一样平台上的虚拟机制,所以实现了“处处运行”的效果。须要强调的一点是,java并非编译机制,而是解释机制。Java字节码的设计充分考虑了JIT(Just InTime)这一即时编译方式,能够将字节码直接转化成高性能的本地机器码,这一样是虚拟机的一个构成部分。编程语言