面試題目
我們開發(fā)中都會用到javac編譯器损话,那咱們聊一下你對javac的理解侦啸,它的基本結構槽唾,以及是如何將Java源碼編譯成Java字節(jié)碼的?
考點剖析
通過對javac的剖析來深入理解編譯器的原理。即javac把Java語法規(guī)矩翻譯成Java虛擬機語法規(guī)矩光涂。
答案解析
javac做了些什么庞萍?
說白了,javac就是一個編譯器忘闻;編譯器就是把一種語言規(guī)矩轉換成另一種語言規(guī)矩钝计,也就是將對人友好的語言轉換成對機器友好的語言。因此齐佳,javac是把Java源代碼編譯成Java字節(jié)碼私恬,即JVM可以識別的二進制;表面上就是將.java文件轉成.class文件炼吴。
javac做了些什么本鸣?
主要由4個模塊組成。
詞法剖析器:識別Java中的if硅蹦、else荣德、for、while等關鍵字及其語句的合法性童芹,構成符合標準的Token流涮瞻。
語法剖析器:對構成的Token流進行語法剖析,檢查它們構成的組合是否符合Java語法標準辐脖,構成抽象的語法樹饲宛。
語義剖析器:將foreach皆愉、注解等雜亂的語法轉換成最簡略的語法嗜价,構成注解往后的語法樹。
字節(jié)碼生成器:將注解往后的語法樹翻譯器字節(jié)碼幕庐。
在之前的面試解說中我們經(jīng)剖析了由常量表達式計算出的字符串(字面量+字面量)久锥,為 什么并不會發(fā)生多個對象?
因為javac在編譯期間异剥,已經(jīng)對這些字符串進行了合并操作瑟由。
(完)
最后,如果你現(xiàn)在也是在學習java冤寿,你可以關注我的微信公眾號:java王者之路歹苦。有為Java新手們準備的零基礎到高級java學習資源,有免費公開課督怜、java系統(tǒng)學習路徑 等等與大家分享殴瘦。歡迎大家關注。