計算機高級語言按程序的執(zhí)行方式可分為:編譯型語言和解釋型語言。
編譯型語言是指使用專門的編譯器、針對特定的平臺,將源程序編譯成該平臺可以執(zhí)行的機器碼(包括機器指令和操作數(shù)),即目標(biāo)程序,編譯結(jié)束后,可能還需要鏈接其他目標(biāo)程序,最終生成可執(zhí)行性程序,實現(xiàn)底層次的復(fù)用。編譯生成的可執(zhí)行性程序可以脫離開發(fā)環(huán)境,在特定的平臺上獨立運行。但是編譯型語言的程序平臺依賴性強,當(dāng)移植到其他平臺上時需要重新編譯。這類語言現(xiàn)有c ,c++,fortran,pascal等。
解釋型語言是指使用專門解釋器對源程序逐行解釋成特定平臺上的機器碼,它將編譯和解釋混合在一起同時來完成,每次執(zhí)行解釋性語言的程序都要進行一次編譯,因此效率比較低,但有個優(yōu)點就是跨平臺性好,只有要提供特定平臺的解釋器,就可解釋成該平臺上的機器指令。現(xiàn)有的ruby,python等語言都是解釋性語言。
java是一種特殊的高級語言, 它既是編譯型語言又是解釋型語言,需要先編譯后解釋。首先由編譯器編譯成與平臺無關(guān)的字節(jié)碼(也就是.class文件),當(dāng)然,這個字節(jié)碼時不可執(zhí)行的,必須用java解釋器來解釋執(zhí)行。java語言里誰來負(fù)責(zé)解釋執(zhí)行字節(jié)碼文件呢——java虛擬機(jvm),所有平臺上jvm向編譯器提供接口,編譯成虛擬機能夠理解字節(jié)碼,然后由虛擬機來解釋執(zhí)行。
當(dāng)使用java編譯器編譯java程序時,生成與平臺無關(guān)的字節(jié)碼,它不需要面向特定平臺,而只面向jvm。不同平臺的jvm不同,但他們提供了相同的接口。jvm是java跨平臺的關(guān)鍵部分。