『壹』 簡述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中文版》pdf,誰有給我一份wk794834392 @163.com
見附件。
『叄』 java中的正則表達式跟編譯原理有什麼聯系
首先,正則表達式不僅在Java里有,其它語言裡面也有,它是一個數學上的概念,各個語言中的正則表達式是它的不同形式的實現。
其次,編譯原理的詞法分析里,會用到正則表達式去匹配源程序中的各種token(記號),比如說
int a = 8;
里識別出:
類型名:int
變數名:a
運算符:=
數字:8
結尾分號:;
總之,二者有聯系,但不是一回事。
『肆』 java關於this的編譯原理
自引用嘛。
比如Student類里的this,就代表所有這個類的對象,這樣理解就行了。
『伍』 編譯原理課程設計詞法分析器設計(java實現)
參考答案 永遠對生活充滿希望,對於困境與磨難,微笑面對。
『陸』 java、c語言,編譯原理,高手來下
程序編譯??
你的最終目的是開發編譯器還是做文法解釋器?還是你就是像學編程?
如果你像做編譯方面的研究,初中還太早了。有很多基礎知識你不懂沒有辦法學的。要學編譯原理只要要先學離散數學。
如果你僅僅是要學編程(基本的軟體開發),我建議你學標准C開始,唐浩強的那本C語言教程非常經典,而且也好懂。
如果你喲問題的話,給我郵件:danndy◎21cn.com,我盡力回答。不好意思,公司將QQ封了,我不能上QQ。
『柒』 有沒有介紹java編譯原理的書籍推薦。現在在學java只是模仿代碼,但不知道為什麼程序要這樣寫,我
學Java必看書籍:Java編程規范,Effective Java第二版,Java並發編程實踐,Java解惑,ROBUST Java 中文版-Java異常處理、測試與調試
另外我也有學Java的課程老師給我們推薦:Java面向對象編程
『捌』 java程序員該不該學編譯原理
對於程序員來說。越能理解計算機程序在計算機中實際的底層結構及在腦中想像書數據流圖,那更容易寫代碼的質量
『玖』 求 幫助啊 java 的 程序 編譯原理的程序 LR分析
在你的主方法裡面調用其他的方法一個方法時出現
java.lang.NumberFormatException: For input string: "abb" 異常..
異常說當你想把abb轉換成為數值類型,但add字元串不能轉換為適當格式時,拋出該異常..
你檢查下程序,做個判斷如果輸入不符合要求就提示.. 或者捕獲異常進行處理
『拾』 編譯原理中的算符文法,怎樣才能用java代碼實現求firstvt集和lastvt集,急急急
1、FIRSTVT(T)=FIRSTVT(T*F)=*;
2、FIRSTVT(T)=FIRSTVT(F)
(1)FIRSTVT(F)=FIRSTVT((E))=(;
(2)FIRSTVT(F)=FIRSTVT(id)=id;
如此,FIRSTVT(T)={*,(,id}。