Java程式可以跨平臺(tái),這是你在許多書或文件早就看過的描述,但是跨平臺(tái)是怎麼一回事?在這之前,你得先了解不能跨平臺(tái)是怎麼一回事。
其 實(shí)對(duì)於電腦而言,它只認(rèn)識(shí)一種語言,也就是0101序列所組合而成的指令。當(dāng)你使用的是C/C++等之類的高階語言撰寫程式時(shí),其實(shí)這些語言,都是比較貼 近人類可閱讀的文法,精確點(diǎn)來說,大部份就是比較接近英文文法的語言。這是為了方便人類閱讀及撰寫。電腦其實(shí)看不懂C/C++這類語言。
你要有個(gè)「翻譯員」將你寫的C/C++程式,翻譯為電腦看得懂的0101序列指令,這個(gè)翻譯員就是所謂的
「編譯器」(Compiler)
:
問 題在於,每個(gè)平臺(tái)所認(rèn)識(shí)的0101序列並不一樣。在Windows上也許某個(gè)指令是0101,在Linux下也許是1010,因此不同的平臺(tái)必須使用不同 的編譯器來翻你的程式,而在Windows平臺(tái)上編譯好的程式,也不能直接拿到Linux等其它平臺(tái)上執(zhí)行,而必須經(jīng)過重新編譯的動(dòng)作,讓編譯器將你的程 式翻譯為該平臺(tái)可以執(zhí)行的指令。
由於每個(gè)平臺(tái)的特性不同,可引用的程式庫(Library)不同,也許你的程式還得作修改,才可以在另一個(gè)平臺(tái)上編譯執(zhí)行。這很不方便,這表示如果你在Windows設(shè)計(jì)了一款遊戲,想要賣給Linux的使用者,就得再花費(fèi)一些功夫。
Java 也是個(gè)高階語言,要讓電腦執(zhí)行你撰寫的程式,也是得透過編譯器的翻譯。不過,
Java編譯時(shí),並不直接翻譯為相依於某平臺(tái)的0101指令,而是翻譯為中介 格式的位元碼(byte code)。Java 的原始碼副檔名為*.java,經(jīng)過編譯器翻譯過後,會(huì)變成*.class的位元碼。
如果想要執(zhí)行這個(gè)位元碼檔案,目標(biāo)平臺(tái)上必須安裝有
JVM(Java Virtual Machine)
。
JVM會(huì)將位元碼翻譯為平臺(tái)相依的語言
。
不同的平臺(tái)必須安裝該平臺(tái)相依的JVM。這就好比你講中文(*.java),Java編譯器幫你翻譯為英文(*.class)。之後該英文文件,到當(dāng)?shù)刂幔儆僧?dāng)?shù)乜吹枚⑽牡娜朔g為當(dāng)?shù)氐恼Z言。
所以JVM所擔(dān)任的職責(zé)之一,就是當(dāng)?shù)氐姆g員,將位元碼檔案翻譯為當(dāng)時(shí)作業(yè)系統(tǒng)看得懂的0101序列。不過這不是最重要的,基本上如果只是要翻譯員的話,直譯器(Interpreter )就辦得到了。
JVM有個(gè)很重要的觀念就是:
「對(duì)於Java程式而言,其實(shí)它只認(rèn)識(shí)一種作業(yè)系統(tǒng)(或說是一種機(jī)器),這個(gè)系統(tǒng)叫作JVM,
而對(duì)於JVM而言,位元碼檔案就是它的可執(zhí)行檔案!也就是副檔名為.class的檔案。
Java程式理想上,並不用理會(huì)真正執(zhí)行於哪個(gè)平臺(tái)之上,它只要知道如何執(zhí)行於JVM之上就可以了,至於JVM實(shí)際上如何與底層平臺(tái)作溝通,則是JVM自己的事
!」這個(gè)觀念非常的重要,對(duì)於往後釐清所謂PATH變數(shù)與CLASSPATH變數(shù),有非常大的幫助。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
