在说明原理之前linux 发邮件,我们先引用一个概念作解释。
首先,JAVA编程语言属于中级编程语言,而中级编程语言的编译运行方法有三种:
编撰,编译,运行。
编撰是指程序工作者自动编撰的源代码文件
例如java程序员编撰的文件一定是以“.java”为后缀的。
编译是指程序工作者编撰的源代码文件转化成机器认识的机器语言的过程。
运行是指通过编译后,让机器执行编译后的指令。
而中级语言的编译方法也分为三种:(如右图)
编译型的代表语言就是我们你们所熟知的:C/C++语言
C/C++的编译首先通过手机或笔记本两种平台编译器进行整体翻译,例如手机的平台编译器是Arm编译器,而笔记本的平台编译器是X86编译器。经过平台整体翻译后,会得到一个二补码的机器指令,之后在手机或笔记本上运行。
但虽然C语言经过平台编译器后,即使是同样的笔记本平台编译,也会因为不同的计算机硬件和操作系统不同常见的手机操作系统,而形成兼容性问题。
所以针对不同类型的硬件和操作系统,C语言的源代码都须要重新按照实际进行编撰。
毫不夸张的说,即使是同类型操作系统常见的手机操作系统,但因为计算机硬件不同,也很容易导致难以运行的问题。
所以C语言不是跨平台的语言!
解释型的代表语言是Python语言
Python的编译运行方法和C语言类似,手机的平台通过Arm平台编译器,笔记本的平台通过X86编译器。但Python语言不是直接全部进行编译转换,而是一行代码一行代码的翻译转换。
Python在编译后不会生成一个新的文件,运行的方法是直接通过运行的设备进行,所以Python语言是天生的开源语言。
接出来就是我们要介绍的JAVA语言!
混和型(编译+解释)的代表则是JAVA语言。
JAVA源代码文件首先编译成后缀名是“.class”的二补码文件(俗称字节码文件),之后同样,手机对应的平台编译器是Arm,笔记本平台对应的平台编译器是X86。
但JAVA字节码文件并不是直接交给相对的设备去运行的,而是交给了在操作系统下的设备的虚拟机(英语简称JVM)中。(注意:字节码文件只面向虚拟机,不具备面向平台能力。虽然因为操作系统不同造成的所对应的虚拟机也不同,而且这种不同的虚拟机都提供了相同的插口)
在不同的操作系统中对应着不同的虚拟机linux社区,而JAVA字节码文件都可以通过在对应不同操作系统的虚拟机中进行编译,以常见的三个操作系统Windows,Mac,Linux来说明:(如右图)
上图中我们可以看见,JAVA源文件只是编撰了一次,就可以在不同平台上进行编译之后运行。
只须要我们在对应的平台安装JAVA提供的对应的虚拟机即可。
正是这一特点,也引出了当时形容JAVA语言的标语:
“WriteOnce,RunAnywhere(一次编撰,四处运行)”。