很多小伙伴們都很好奇,為什么 Java 可以一處編譯,處處運(yùn)行?這是 Java 特有的功能嗎?接下來(lái)小編的這篇文章告訴你 Java 怎么實(shí)現(xiàn)一處編譯處處運(yùn)行。
C語(yǔ)言的編譯運(yùn)行方式
以 C 語(yǔ)言為例,我們要用 C 語(yǔ)言寫一段程序,需要先用 C 語(yǔ)言寫成 cpp 文件,然后使用編譯器將其編譯成可執(zhí)行文件??蓤?zhí)行文件由二進(jìn)制的機(jī)器碼組成,但是不同機(jī)器的CPU不一樣(決定了機(jī)器碼的不同),系統(tǒng)也不一樣(決定了可執(zhí)行文件格式的不同),所以它們編譯出來(lái)的二進(jìn)制文件也是不一樣的。比如 Windows 編譯出來(lái)的是 ?obj,lib,dll,exe
? 這樣的文件,而 Linux 編譯出來(lái)的是? .o,.a,.so
? 這樣的文件。它們之間并不能通用。所以一份源代碼要在不同的電腦上運(yùn)行需要重新編譯才能得到對(duì)應(yīng)的可執(zhí)行文件。
Java的編譯運(yùn)行方式
Java 和 C 語(yǔ)言不同,開(kāi)發(fā)者用 Java 寫成 java 文件,使用 Java 編譯器編譯后可以得到 java 的 class 文件(這種文件又叫做 Java 字節(jié)碼文件,字節(jié)碼文件類似于機(jī)器碼,但機(jī)器碼直接在 CPU 上運(yùn)行,而字節(jié)碼在 Java 虛擬機(jī)上運(yùn)行)。然后將 class 文件放在相應(yīng)系統(tǒng)的虛擬機(jī)上進(jìn)行運(yùn)行。不同的電腦雖然操作系統(tǒng)不同,CPU 也不同,但是它們安裝的 Java 虛擬機(jī)為 Java 代碼提供了統(tǒng)一的接口。只要目標(biāo)機(jī)器可以安裝 Java 虛擬機(jī),Java 的 class 文件就可以在目標(biāo)機(jī)器上運(yùn)行。
JavaScript等解釋型語(yǔ)言的運(yùn)行方式
JavaScript 與 Java 不同,Java 需要將源代碼編譯后再放進(jìn) Java 虛擬機(jī)運(yùn)行,而 JavaScript 直接將源代碼放進(jìn) JavaScript 解釋器運(yùn)行。這樣的方式也讓 JavaScript 的可移植性變得十分強(qiáng)大。不過(guò)因?yàn)?JavaScript 沒(méi)有沒(méi)有經(jīng)歷過(guò)編譯,所以在運(yùn)行 JavaScript 代碼的時(shí)候解釋器要承擔(dān)額外的工作而導(dǎo)致效率變低。
小結(jié)
以 Java 為例,雖然不同平臺(tái)有著各自的不同情況,但 Java 虛擬機(jī)的存在讓 Java 最終運(yùn)行的地方的情況相同,所以不需要分情況進(jìn)行編譯。不同平臺(tái)的各種不同情況,只需要在 Java 虛擬機(jī)中進(jìn)行處理即可。通俗的講,Java 虛擬機(jī)在不同的機(jī)器上為 Java 字節(jié)碼文件搭建了相同的舞臺(tái)。
以上就是關(guān)于怎么實(shí)現(xiàn)一處編譯處處運(yùn)行的全部?jī)?nèi)容,更多技術(shù)類介紹文章盡請(qǐng)關(guān)注W3C技術(shù)頭條。