Java程序的運(yùn)行必須經(jīng)過編寫、編譯和運(yùn)行3個(gè)步驟。
編寫:是指在Java開發(fā)環(huán)境中進(jìn)行程序代碼的輸入,最終形成后綴名為.java的Java源文件。
編譯:是指使用Java編譯器對(duì)源文件進(jìn)行錯(cuò)誤排査的過程,編譯后將生成后綴名為.class的字節(jié)碼文件,不像C語言那樣生成可執(zhí)行文件。
運(yùn)行:是指使用Java解釋器將字節(jié)碼文件翻譯成機(jī)器代碼,執(zhí)行并顯示結(jié)果。
Java程序運(yùn)行流程如圖1所示。
字節(jié)碼文件是一種和任何具體機(jī)器環(huán)境及操作系統(tǒng)環(huán)境無關(guān)的中間代碼。它是一種二進(jìn)制文件,是Java源文件由Java編譯器編譯后生成的目標(biāo)代碼文件。編程人員和計(jì)算機(jī)都無法直接讀懂字節(jié)碼文件,它必須由專用的Java解釋器來解釋執(zhí)行,因此Java是一種在編譯基礎(chǔ)上進(jìn)行解釋運(yùn)行的語言。
Java解釋器負(fù)責(zé)將字節(jié)碼文件翻譯成具體硬件環(huán)境和操作系統(tǒng)平臺(tái)下的機(jī)器代碼,以便執(zhí)行。因此Java程序不能直接運(yùn)行在現(xiàn)有的操作系統(tǒng)平臺(tái)上,它必須運(yùn)行在被稱為Java虛擬機(jī)的軟件平臺(tái)之上。
Java虛擬機(jī)(JVM)是運(yùn)行Java程序的軟件環(huán)境,Java解釋器是Java虛擬機(jī)的一部分。在運(yùn)行Java程序時(shí),首先會(huì)啟動(dòng)JVM,然后由它來負(fù)責(zé)解釋執(zhí)行Java的字節(jié)碼程序,并且Java字節(jié)碼程序只能運(yùn)行于JVM之上。這樣利用JVM就可以把Java字節(jié)碼程序和具體的硬件平臺(tái)以及操作系統(tǒng)環(huán)境分隔開來,只要在不同的計(jì)算機(jī)上安裝了針對(duì)特定平臺(tái)的JVM,Java程序就可以運(yùn)行,而不用考慮當(dāng)前具體的硬件平臺(tái)及操作系統(tǒng)環(huán)境,也不用考慮字節(jié)碼文件是在何種平臺(tái)上生成的。
JVM把這種不同軟、硬件平臺(tái)的具體差別隱藏起來,從而實(shí)現(xiàn)了真正的二進(jìn)制代碼級(jí)的跨平臺(tái)移植。JVM是Java平臺(tái)架構(gòu)的基礎(chǔ),Java的跨平臺(tái)特性正是通過在JVM中運(yùn)行Java程序?qū)崿F(xiàn)的。Java的這種運(yùn)行機(jī)制可以通過圖2來說明。
Java語言這種“一次編寫,到處運(yùn)行”的方式,有效地解決了目前大多數(shù)高級(jí)程序設(shè)計(jì)語言需要針對(duì)不同系統(tǒng)來編譯產(chǎn)生不同機(jī)器代碼的問題,即硬件環(huán)境和操作平臺(tái)的異構(gòu)問題,大大降低了程序開發(fā)、維護(hù)和管理的開銷。
提示:Java程序通過JVM可以實(shí)現(xiàn)跨平臺(tái)特性,但JVM是不跨平臺(tái)的。也就是說,不同操作系統(tǒng)之上的JVM是不同的,Windows平臺(tái)之上的JVM不能用在Linux平臺(tái),反之亦然。
以上就是深圳達(dá)內(nèi)教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java基礎(chǔ)學(xué)習(xí):Java語言的執(zhí)行模式”的內(nèi)容,希望對(duì)大家有幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。