真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java編譯生成代碼 java代碼如何編譯

Java編譯器如何生成重載和覆蓋方法代碼

舉個簡單的例子,展示了多態(tài)性(Polymorphism):重載(Overloaded)和覆蓋(Overridden)。

創(chuàng)新互聯(lián)是一家專業(yè)提供樂平企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計、HTML5、小程序制作等業(yè)務(wù)。10年已為樂平眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進行中。

多態(tài)性意味著方法可以在不同的時刻表現(xiàn)出不同的形式。在編譯期間,這被稱為方法重載。重載允許相關(guān)的方法可以使用相同的方法名訪問。有時候這被稱為ad hoc polymorphism,與parametric polymorphism 不同。

輸出:

intstringoverriden int

從編譯器的角度講,如何生成能夠正確調(diào)用的函數(shù)的代碼?

靜態(tài)重載(Static overloading)不難實現(xiàn)。當處理一個重載方法的聲明時,一個新的綁定會被映射到一個不同的實現(xiàn)。在處理類型檢查的過程中,編譯器會分析參數(shù)的實際類型,然后決定使用哪個方法。

動態(tài)重載(Dynamic overloading )允許運行時根據(jù)實際參數(shù)的類型來選擇函數(shù)的不同實現(xiàn)。這是動態(tài)調(diào)度(dynamic dispatch)的一種形式。

動態(tài)調(diào)度也被用來實現(xiàn)方法覆蓋。被覆蓋的方法的調(diào)用由運行期間實際對象的類型決定的。

Java程序的運行機制是怎么樣的?

Java程序的運行機制可以分為以下幾個步驟:

編寫Java源代碼:首先,程序員需要使用Java編程語言編寫源代碼。Java源代碼是以.java為擴展名的文本文件,包含了Java程序的邏輯和功能。

編譯Java源代碼:Java源代碼需要通過Java編譯器進行編譯,生成字節(jié)碼文件。字節(jié)碼文件是以.class為擴展名的二進制文件,包含了Java程序的指令、變量和方法。

解釋執(zhí)行字節(jié)碼文件:Java虛擬機(JVM)負責解釋執(zhí)行字節(jié)碼文件。JVM是一個虛擬的計算機,它模擬了實際計算機的硬件和操作系統(tǒng),能夠運行字節(jié)碼文件。

類加載:當Java程序被執(zhí)行時,JVM會根據(jù)需要動態(tài)加載所需的類。Java類庫和自定義類都會被加載到內(nèi)存中。

執(zhí)行Java程序:JVM會按照程序的邏輯和功能執(zhí)行Java程序。程序員可以在程序中使用Java類庫和自定義類提供的方法和變量。

垃圾回收:JVM還負責垃圾回收,它會自動回收不再使用的內(nèi)存空間,防止程序出現(xiàn)內(nèi)存泄漏等問題。

總的來說,Java程序的運行機制可以概括為:編寫源代碼 - 編譯生成字節(jié)碼文件 - 解釋執(zhí)行字節(jié)碼文件 - 加載所需類 - 執(zhí)行Java程序 - 垃圾回收。

JAVA代碼編譯

public?class?Test?{

public?static?void?main(String?args[])?{

Square?square?=?new?Square(4);

double?area?=?square.area();

System.out.println("面積為:"?+?area);

}

}

interface?IShape?{

public?double?area();

}

class?Square?implements?IShape?{

private?double?a;

public?Square(double?a)?{

this.a?=?a;

}

@Override

public?double?area()?{

return?a?*?a;

}

}

Java代碼到底是如何編譯成機器指令的

編譯器把一種語言規(guī)范轉(zhuǎn)化為另一種語言規(guī)范的這個過程需要哪些步驟?回答這個問題需要參照《編譯原理》,總結(jié)過程如下:

1)詞法分析:讀取源代碼,一個字節(jié)一個字節(jié)的讀進來,找出這些詞法中我們定義的語言關(guān)鍵詞如:if、else、while等,識別哪些if是合法的哪些是不合法的。這個步驟就是詞法分析過程。

詞法分析的結(jié)果:就是從源代碼中找出了一些規(guī)范化的token流,就像人類語言中,給你一句話你要分辨出哪些是一個詞語,哪些是標點符號,哪些是動詞,哪些是名詞。

2)語法分析:就是對詞法分析中得到的token流進行語法分析,這一步就是檢查這些關(guān)鍵詞組合在一起是不是符合Java語言規(guī)范。如if的后面是不是緊跟著一個布爾型判斷表達式。

語法分析的結(jié)果:就是形成一個符合Java語言規(guī)定的抽象語法樹,抽象語法樹是一個結(jié)構(gòu)化的語法表達形式,它的作用是把語言的主要詞法用一個結(jié)構(gòu)化的形式組織在一起。這棵語法樹可以被后面按照新的規(guī)則再重新組織。

3)語義分析:語法分析完成之后也就不存在語法問題了,語義分析的主要工作就是把一些難懂的,復(fù)雜的語法轉(zhuǎn)化成更簡單的語法。就如難懂的文言文轉(zhuǎn)化為大家都懂的百話文,或者是注釋一下一些不懂的成語。

語義分析結(jié)果:就是將復(fù)雜的語法轉(zhuǎn)化為簡單的語法,對應(yīng)到Java就是將foreach轉(zhuǎn)化為for循環(huán),還有一些注釋等。最后生成一棵抽象的語法樹,這棵語法樹也就更接近目標語言的語法規(guī)則。

4)字節(jié)碼生成:將會根據(jù)經(jīng)過注釋的抽象語法樹生成字節(jié)碼,也就是將一個數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為另外一個數(shù)據(jù)結(jié)構(gòu)。就像將所有的中文詞語翻譯成英文單詞后按照英文語法組裝文英文語句。代碼生成器的結(jié)果就是生成符合java虛擬機規(guī)范的字節(jié)碼。


本文題目:java編譯生成代碼 java代碼如何編譯
瀏覽路徑:http://weahome.cn/article/doeogdd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部