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