⑴ 簡述java程序從編寫到運行的基本步驟,並說明Java的基本工作原理
Java編譯原理:
Java 虛擬機(JVM)是可運行Java 代碼的假想計算機。只要根據JVM規格描述將解釋器移植到特定的計算機上,就能保證經過編譯的任何Java代碼能夠在該系統上運行。
一.Java源文件的編譯、下載 、解釋和執行
Java應用程序的開發周期包括編譯、下載 、解釋和執行幾個部分。Java編譯程序將Java源程序翻譯為JVM可執行代碼?位元組碼。這一編譯過程同C/C++ 的編譯有些不同。當C編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬體平台運行而產生的。因此,在編譯過程中,編譯程序通過查表將所有對符號的引用轉換為特定的內存偏移量,以保證程序運行。Java編譯器卻不將對變數和方法的引用編譯為數值引用,也不確定程序執行過程中的內存布局,而是將這些符號引用信息保留在位元組碼中,由解釋器在運行過程中創立內存布局,然後再通過查表來確定一個方法所在的地址。這樣就有效的保證了Java的可移植性和安全 性。
運行JVM位元組碼的工作是由解釋器來完成的。解釋執行過程分三部進行:代碼的裝入、代碼的校驗和代碼的執行。裝入代碼的工作由"類裝載器"(class loader)完成。類裝載器負責裝入運行一個程序需要的所有代碼,這也包括程序代碼中的類所繼承的類和被其調用的類。當類裝載器裝入一個類時,該類被放在自己的名字空間中。除了通過符號引用自己名字空間以外的類,類之間沒有其他辦法可以影響其他類。在本台計算機上的所有類都在同一地址空間內,而所有從外部引進的類,都有一個自己獨立的名字空間。這使得本地類通過共享相同的名字空間獲得較高的運行效率,同時又保證它們與從外部引進的類不會相互影響。當裝入了運行程序需要的所有類後,解釋器便可確定整個可執行程序的內存布局。解釋器為符號引用同特定的地址空間建立對應關系及查詢表。通過在這一階段確定代碼的內存布局,Java很好地解決了由超類改變而使子類崩潰的問題,同時也防止了代碼對地址的非法訪問。
隨後,被裝入的代碼由位元組碼校驗器進行檢查。校驗器可發現操作數棧溢出,非法數據類型轉化等多種錯誤。通過校驗後,代碼便開始執行了。
Java位元組碼的執行有兩種方式:
1.即時編譯方式:解釋器先將位元組碼編譯成機器碼,然後再執行該機器碼。
2.解釋執行方式:解釋器通過每次解釋並執行一小段代碼來完成Java位元組碼程 序的所有操作。
通常採用的是第二種方法。由於JVM規格描述具有足夠的靈活性,這使得將位元組碼翻譯為機器代碼的工作
具有較高的效率。對於那些對運行速度要求較高的應用程序,解釋器可將Java位元組碼即時編譯為機器碼,從而很好地保證了Java代碼的可移植性和高性能。
⑵ java的"一次編譯,到處運行"的機制是如何實現的
JVM是一個java虛擬機,所謂的java虛擬機就是和普通的虛擬機一樣,擁有自己的CPU,RAM之類的。我們所使用的操作系統是Windows的操作系統,Windows操作系統支持的可執行文件是EXE文件,也就是說在Windows的操作系統上只有EXE的文件是可以直接被操作系統解釋為底層機器語言並進行運行的。而java虛擬機可以支持的是.class的可執行文件,在java的虛擬機中遇到.class的文件就可以直接翻譯成java虛擬機所能是別的底層機器語言並進行執行。這就是JVM的機制,正是因為java的這種機制才實現了java的跨平台,在不同的平台上安裝能夠在相應平台上運行的虛擬機,然後在java虛擬機中運行java的源程序,「一次編譯,多次執行」就此實現了。
所以java的跨平台是離不開虛擬機的支持的。虛擬機充當著java源程序和操作系統之間的中間,不同的操作系統只需要尋找相應的中介就可以實現在不同的操作系統上運行。而java的編譯只是吧.java文件編譯為.class位元組碼文件而已,然後把位元組碼交給虛擬機去執行。
虛擬機在執行的時候是讀一句位元組碼文件人後解釋一句給操作系統聽,這就是為什麼java是解釋型的語言。
所謂的編譯型的語言是指這種語言被編譯之後生成的是可以直接供操作系統執行的010101文件,像C,C++都是編譯型的,java因為中間有JVM這么個東西所以是解釋型的。
⑶ javac是做什麼的
javac是編譯Java程序的工具。具體來說:
功能:javac用於將Java源代碼編譯成Java位元組碼,這些位元組碼可以在Java虛擬機上運行。
文件類型:javac是一個.exe文件,屬於可執行文件。在DOS或其他命令行界面中,可以直接通過輸入javac來運行它。
使用方式:在編譯Java程序時,需要運行javac.exe程序,並將要編譯的Java文件名作為參數傳遞給它。例如,編譯名為HelloWorld.java的文件,可以在命令行中輸入javac HelloWorld.java。
位置:javac.exe通常位於Java安裝目錄中的JDK子目錄下面的bin目錄中。安裝Java開發環境後,可以在該目錄下找到javac.exe文件。
總結:javac是Java開發工具包中用於編譯Java源代碼的關鍵工具,它將源代碼轉換為可在JVM上運行的位元組碼。