java語言的編譯原理
A. 簡述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代碼的可移植性和高性能。
B. java中的正則表達式跟編譯原理有什麼聯系
首先,正則表達式不僅在Java里有,其它語言裡面也有,它是一個數學上的概念,各個語言中的正則表達式是它的不同形式的實現。
其次,編譯原理的詞法分析里,會用到正則表達式去匹配源程序中的各種token(記號),比如說
int a = 8;
里識別出:
類型名:int
變數名:a
運算符:=
數字:8
結尾分號:;
總之,二者有聯系,但不是一回事。
C. java是c語言還是C++編寫的
java是C++編寫的。
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。
Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。
Java具有簡單性、面向對象、分布式、健壯性、安全性、平台獨立與可移植性、多線程、動態性等特點。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等。

java工作原理由四方面組成:
(1)Java編程語言
(2)Java類文件格式
(3)Java虛擬機
(4)Java應用程序介面
當編輯並運行一個Java程序時,需要同時涉及到這四種方面。使用文字編輯軟體或集成開發環境在Java源文件中定義不同的類,通過調用類中的方法來訪問資源系統;
把源文件編譯生成一種二進制中間碼,存儲在class文件中,然後再通過運行與操作系統平台環境相對應的Java虛擬機來運行class文件,執行編譯產生的位元組碼,調用class文件中實現的方法來滿足程序的Java API調用。
D. java關於this的編譯原理
java提供了一個this關鍵字,它是一個對象的默認引用,this關鍵字總是指向調用該方法的對象,根據this的出現位置不同,this作為對象的默認引用由兩種情形:
1.構造器中引用該構造器執行初始化
的對象;
2.在方法中引用調用引用該方法的對像;
this關鍵字最大的作用就是讓類中的一個方法,訪問該類的另一個方法或屬性。
E. C語言,Java語言的符號表區別和特點是什麼他們分別是如何處理函數參數的(編譯原理)
具體點?java用的是JVM,給你解釋一下JVM的相關嗎?不過JVM底層演算法同樣用的C。
F. java怎樣解釋執行兩種應用程序
問題不夠詳細,請問你說的兩種應用程序是什麼意思...........
如果你是說JAVA編譯原理的
~~~~~~~~~~
java是編譯解釋型語言,是先編譯後解釋;
先把代碼變異成位元組碼文件,就是.calss結尾的文件
然後在JVM(java虛擬機)
中解釋執行位元組碼文件...
謝謝採納
G. 有沒有介紹java編譯原理的書籍推薦。現在在學java只是模仿代碼,但不知道為什麼程序要這樣寫,我
學Java必看書籍:Java編程規范,Effective Java第二版,Java並發編程實踐,Java解惑,ROBUST Java 中文版-Java異常處理、測試與調試
另外我也有學Java的課程老師給我們推薦:Java面向對象編程
H. C語言和JAVA語言的運行機制有何不同
很簡單,如果你有學習過編譯原理就會明白的。
C和Java都是高級編程語言,計算機是不會明白的,而要讓計算機明白,就得找個「翻譯」。
而這個「翻譯」有兩類,第一個是「翻譯程序」,第二個是「解釋程序」。
「翻譯程序」的工作就是一次過將高級編程語言編寫的代碼翻譯成低級語言代碼,讓計算機執行翻譯後的代碼。
「解釋程序」的工作就是讀取一句高級編程語言寫的指令就解釋成低級語言編寫的指令,而採取一邊解釋一邊執行的方式。
C就是翻譯之後,讓計算機執行翻譯得到的程序。
Java很特別,在翻譯這一步上,它不是翻譯成直接可以運行的程序,而是「位元組碼」。「位元組碼」由當前操作系統安裝的Java虛擬機一邊解釋一邊執行,注意,相同程序得到的「位元組碼」是一樣的,但是在不同操作系統下的虛擬機則不同。這樣,就可以「一次編寫,處處運行」。但是,一邊解釋一邊執行是效率很低的,所以Java又出了JIT技術,就是Just In Time Compiler及時編譯器,在執行時對一些常用的類花費一定時間進行編譯,但是編譯後執行效率很高,而編譯只需要很少的時間,相對於浪費運行的時候寶貴的相應時間來說是很值得的。
總之,C寫的程序是編譯後由系統直接運行,Java是編譯成位元組碼再由JVM執行解釋執行位元組碼來運行程序,前者執行效率高,後者相對低。
I. 簡述java語言的運行機制
簡單來說Java程序的運行機制
編寫、編譯、運行三個步驟。

運行機制 主要是指
編譯、運行的過程
1、編譯
Java編譯器對源文件進行錯誤排查的過程,編譯後將生成後綴名為.class的位元組碼文件。好讓JVM(java虛擬機)里的解釋器可以正常讀取。
2、運行
三步代碼的裝入、代碼的校驗和代碼的執行
2.1 、代碼的裝入
JVM控制解釋器中的「類裝載器」去讀取和裝載程序所需的類(class的位元組碼)。然後解釋器開始建立類與類之間的關系。
2.2、代碼的校驗
位元組碼校驗器進行檢查:校驗器可發現操作數棧溢出,非法數據類型轉化等多種錯誤。
2.3、代碼的執行
執行也分兩種情況
即時編譯方式:解釋器先將位元組碼編譯成機器碼,然後再執行該機器碼。
解釋執行方式:解釋器通過每次解釋並執行一小段代碼來完成Java位元組碼程 序的所有操作。
通常採用的是第二種方法。由於JVM規格描述具有足夠的靈活性,這使得將位元組碼翻譯為機器代碼的工作
本回答由電腦網路分類達人 化曉峰推薦
J. JAVA是從那個程序語言的基礎上 做出來的
Java編程語言的風格十分接近C語言、C++語言。Java是一個純粹的面向對象的程序設計語言,它繼承了C++語言面向對象技術的核心。Java舍棄了C語言中容易引起錯誤的指針(以引用取代)、運算符重載(operator overloading)、多重繼承(以介面取代)等特性,增加了垃圾回收器功能用於回收不再被引用的對象所佔據的內存空間,使得程序員不用再為內存管理而擔憂。在 Java 1.5 版本中,Java 又引入了泛型編程(Generic Programming)、類型安全的枚舉、不定長參數和自動裝/拆箱等語言特性。
Java不同於一般的編譯執行計算機語言和解釋執行計算機語言。它首先將源代碼編譯成二進制位元組碼(bytecode),然後依賴各種不同平台上的虛擬機來解釋執行位元組碼。從而實現了「一次編譯、到處執行」的跨平台特性。不過,每次的執行編譯後的位元組碼需要消耗一定的時間,這同時也在一定程度上降低了 Java 程序的性能。
來自網路:Java
你可以認為是C++,但因為它舍棄了很多東西,使得開發速度比C++快了許多,所以性能上會有降低。
