都說java是跨平臺的,但為什么是跨平臺呢,.我稍微解釋一下。
java語言編寫的程序要先經(jīng)過編譯的,但這個(gè)編譯不是生成特定平臺的機(jī)器碼,而是生成一種與平臺無關(guān)的字節(jié)碼。
java語言里負(fù)責(zé)解釋執(zhí)行字節(jié)碼文件的是Java虛擬機(jī)(Java Virtual Machine)。JVM是運(yùn)行字節(jié)碼文件的虛擬計(jì)算機(jī)。所有平臺上的JVM向編譯器提供相同的編程接口,而編譯器只需面向虛擬機(jī),生成虛擬機(jī)能理解的字節(jié)碼,然后由虛擬機(jī)解釋執(zhí)行。之所以說Java跨平臺是因?yàn)樽止?jié)碼與平臺無關(guān),但不同平臺的JVM是不同的,但它們向編譯器生成的Java字節(jié)碼程序都提供了相同的接口,但它們適應(yīng)不同的平臺的接口不同。JVM是Java跨平臺的關(guān)鍵,只要為不同平臺實(shí)現(xiàn)了相應(yīng)的虛擬機(jī),那編譯生成的相同的字節(jié)碼文件就可以被解釋后執(zhí)行了。相同的字節(jié)碼在不同的平臺上是不能直接運(yùn)行的,要通過JVM這個(gè)轉(zhuǎn)換器來解釋執(zhí)行。
總結(jié):Java跨平臺,原因是相同的字節(jié)碼文件在不同的平臺上的不同的Java虛擬機(jī)解釋執(zhí)行的,沒有虛擬機(jī),就只好“呵呵”了。