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

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