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