黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java程序編譯和運行的過程

Java程序編譯和運行的過程

更新時間:2019-08-22 11:09:09 來源:動力節點 瀏覽3578次

Java整個編譯以及運行的過程相當繁瑣,本文通過一個簡單的程序來簡單的說明整個流程。

如下圖,Java程序從源文件創建到程序運行要經過兩大步驟:

  1. 源文件由編譯器編譯成字節碼(ByteCode)
  2. 字節碼由java虛擬機解釋運行。因為java程序既要編譯同時也要經過JVM的解釋運行,所以說Java被稱為半解釋語言( "semi-interpreted" language)。

1566442455805521.png

java程序編譯運行過程

下面通過以下這個java程序,來說明java程序從編譯到最后運行的整個流程。代碼如下:

?//MainApp.java??
public class MainApp {??
? ? public static void main(String[] args) {??
? ? ? ? Animal animal = new Animal("Puppy");??
? ? ? ? animal.printName();??
? ? }??
}?
?
//Animal.java??
public class Animal {??
? ? public String name;??
? ? public Animal(String name) {??
? ? ? ? this.name = name;??
? ? }??
? ? public void printName() {??
? ? ? ? System.out.println("Animal ["+name+"]");??
? ? }??
}??

第一步(編譯): 創建完源文件之后,程序會先被編譯為.class文件。Java編譯一個類時,如果這個類所依賴的類還沒有被編譯,編譯器就會先編譯這個被依賴的類,然后引用,否則直接引用,這個有點象make。如果java編譯器在指定目錄下找不到該類所其依賴的類的.class文件或者.java源文件的話,編譯器話報“cant find symbol”的錯誤。

編譯后的字節碼文件格式主要分為兩部分:常量池和方法字節碼。常量池記錄的是代碼出現過的所有token(類名,成員變量名等等)以及符號引用(方法引用,成員變量引用等等);方法字節碼放的是類中各個方法的字節碼。下面是MainApp.class通過反匯編的結果,我們可以清楚看到.class文件的結構:

1566442638873901.png

圖2  MainApp類常量池 

1566442660794885.png

圖3  MainApp類方法字節碼

第二步(運行):java類運行的過程大概可分為兩個過程:

  • 類的加載
  • 類的執行。需要說明的是:JVM主要在程序第一次主動使用類的時候,才會去加載該類。也就是說,JVM并不是在一開始就把一個程序就所有的類都加載到內存中,而是到不得不用的時候才把它加載進來,而且只加載一次。

下面是程序運行的詳細步驟:

  1. 在編譯好java程序得到MainApp.class文件后,在命令行上敲java AppMain。系統就會啟動一個jvm進程,jvm進程從classpath路徑中找到一個名為AppMain.class的二進制文件,將MainApp的類信息加載到運行時數據區的方法區內,這個過程叫做MainApp類的加載。
  2. 然后JVM找到AppMain的主函數入口,開始執行main函數。
  3. main函數的第一條命令是Animal animal = new Animal("Puppy");就是讓JVM創建一個Animal對象,但是這時候方法區中沒有Animal類的信息,所以JVM馬上加載Animal類,把Animal類的類型信息放到方法區中。
  4. 加載完Animal類之后,Java虛擬機做的第一件事情就是在堆區中為一個新的Animal實例分配內存, 然后調用構造函數初始化Animal實例,這個Animal實例持有著指向方法區的Animal類的類型信息(其中包含有方法表,java動態綁定的底層實現)的引用。
  5. 當使用animal.printName()的時候,JVM根據animal引用找到Animal對象,然后根據Animal對象持有的引用定位到方法區中Animal類的類型信息的方法表,獲得printName()函數的字節碼的地址。
  6. 開始運行printName()函數

1566443077743362.png

  圖4 java程序運行過程

特別說明:java類中所有public和protected的實例方法都采用動態綁定機制,所有私有方法、靜態方法、構造器及初始化方法都是采用靜態綁定機制。而使用動態綁定機制的時候會用到方法表,靜態綁定時并不會用到。本文只是講述java程序運行的大概過程,所以并沒有細加區分。本文的所述的流程非常粗糙,想深入了解的學員在線咨詢,有專業老師為你提供免費的學習資料。

以上內容相關免費視頻教程下載:

http://m.ilovecolors.com.cn/xiazai/2732.html

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产激情视频一区二区三区 | 黄色大片久久 | 中文字幕一区二区三区免费看 | 手机看片精品高清国产日韩 | 一级看片免费视频 | www香蕉视频 | 色天天综合网色鬼综合 | 亚洲色图欧美在线 | 亚洲视频大全 | 26uuu欧美视频在线观看 | 怡红院成人永久免费看 | 欧美成人a大片 | 一级毛片特级毛片免费的 | 欧美伊人久久大香线蕉在观 | 窝窝午夜影院 | 欧美高清性xxxxxxx | 免费精品国产日韩热久久 | 午夜视频在线观看视频 | 免费高清资源黄网站在线观看 | 美女黄频a美女大全免费皮 美女黄免费网站 | 亚洲an日韩专区在线 | 久久精品一区二区国产 | 日本三级三级三级免费看 | 亚洲一区二区欧美日韩 | 日韩在线视频二区 | 黄污视频网站 | 免费人成大片在线观看播放 | 69xxⅹ色视频免费看 | 福利视频精品 | 中文字幕丰满孑伦 | 国产亚洲精品自在久久77 | 天天综合天天添夜夜添狠狠添 | 亚洲伊人色一综合网 | 露脸国产精品自产在线播 | 在线a人片免费观看国产 | 欧美成人精品一区二区 | 99精品全国免费观看视频.. | 最近中文字幕国语免费高清6 | 免费人成在线观看网站视频 | 一级全黄视频 | 成人福利视频网 |