国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

Java源程序如何變成Java字節(jié)碼?

網(wǎng)友解答: java源程序是開發(fā)人員編寫的后綴名為.java的文件,而java字節(jié)碼文件是經(jīng)過javac編譯器編譯之后計(jì)算機(jī)能認(rèn)識(shí)的后綴名為.class的文件。javac做了些什么?主要

網(wǎng)友解答:

java源程序是開發(fā)人員編寫的后綴名為.java的文件,而java字節(jié)碼文件是經(jīng)過javac編譯器編譯之后計(jì)算機(jī)能認(rèn)識(shí)的后綴名為.class的文件。

javac做了些什么?

主要由4個(gè)模塊組成

詞法剖析器:識(shí)別java中的if,else,for,while等關(guān)鍵字及其語(yǔ)句的合法性,構(gòu)成符合標(biāo)準(zhǔn)的Token流。

語(yǔ)法剖析器:對(duì)構(gòu)成的Token流進(jìn)行語(yǔ)法剖析,檢查它們構(gòu)成的組合是否符合java語(yǔ)法標(biāo)準(zhǔn),構(gòu)成抽象的語(yǔ)法樹。

語(yǔ)義剖析器:將foreach,注解等雜亂的語(yǔ)法轉(zhuǎn)換成最簡(jiǎn)單的語(yǔ)法,構(gòu)成注解往后的語(yǔ)法樹。

字節(jié)碼生成器:將注解往后的語(yǔ)法樹翻譯成字節(jié)碼。

網(wǎng)友解答: Java源程序和Java字節(jié)碼的定義

java源程序是指由java語(yǔ)言編寫成的以.java結(jié)尾的文件,也可以叫做'Java源碼'。

java字節(jié)碼是指由java源碼編譯之后的以.class結(jié)尾的文件,它是一個(gè)二進(jìn)制文件。

Java源程序(源碼)如何被編譯成Java字節(jié)碼?

1.javac編譯器,這里的Javac編譯器稱為前端編譯器,其他的前端編譯器還有諸如Eclipse、JDT中的增量式編譯器ECJ等。

2.相對(duì)應(yīng)的還有后端編譯器,它主要是在程序運(yùn)行期間將字節(jié)碼轉(zhuǎn)變成機(jī)器碼。

下面我來重點(diǎn)說一下前端編譯器javac

Javac編譯(前端編譯)的過程

1.語(yǔ)法、語(yǔ)詞分析

語(yǔ)法語(yǔ)詞分析是將源碼中的字符流轉(zhuǎn)變?yōu)闃?biāo)記(Token)集合,經(jīng)過這個(gè)步驟后,編譯器就基本不會(huì)再對(duì)源碼文件進(jìn)行操作了,后續(xù)的操作都建立在抽象語(yǔ)法樹之上。

2.填充符號(hào)表

符號(hào)表是由一組符號(hào)地址和符號(hào)信息構(gòu)成的表格。

3.語(yǔ)義分析

語(yǔ)法樹能表示一個(gè)結(jié)構(gòu)正確的源程序的抽象,但無法保證源程序是符合邏輯的,而語(yǔ)義分析的主要任務(wù)是對(duì)結(jié)構(gòu)上正確的源程序進(jìn)行上下文有關(guān)性的審查。

4.字節(jié)碼生成

字節(jié)碼生成是Javac編譯過程的最后一個(gè)階段。

字節(jié)碼生成階段不僅僅是把前面各個(gè)步驟所生成的信息轉(zhuǎn)化成字節(jié)碼寫到磁盤中,編譯器還進(jìn)行了少量的代碼添加和轉(zhuǎn)換工作。

如你寫的源碼中沒有提供任何構(gòu)造函數(shù),那編譯器會(huì)自動(dòng)添加一個(gè)沒有參數(shù)、訪問權(quán)限與當(dāng)前類一致的默認(rèn)構(gòu)造函數(shù),這個(gè)工作其實(shí)在填充符號(hào)表階段就已經(jīng)完成了。

下面附上一張我摘自網(wǎng)絡(luò)的整個(gè)編譯過程中的細(xì)節(jié)圖,我只是略知其中一二,具體的細(xì)節(jié)還待研究,業(yè)內(nèi)高手可以發(fā)表評(píng)論到下面,我們共同學(xué)習(xí),共同進(jìn)步!

標(biāo)簽: