Java程序從源文件創(chuàng)建到程序運行要經(jīng)過兩大步驟:1、源文件由編譯器編譯成字節(jié)碼(ByteCode)
成都創(chuàng)新互聯(lián)是專業(yè)的陽西網(wǎng)站建設(shè)公司,陽西接單;提供網(wǎng)站設(shè)計、成都網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行陽西網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
2、字節(jié)碼由java虛擬機解釋運行。因為java程序既要編譯同時也要經(jīng)過JVM的解釋運行,所以說Java被稱為半解釋語言( "semi-interpreted" language)。
下面通過以下這個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+"]");
}
}
第一步(編譯): 創(chuàng)建完源文件之后,程序會先被編譯為.class文件。Java編譯一個類時,如果這個類所依賴的類還沒有被編譯,編譯器就會先編譯這個被依賴的類,然后引用,否則直接引用,這個有點象make。如果java編譯器在指定目錄下找不到該類所其依賴的類的.class文件或者.java源文件的話,編譯器話報“cant find symbol”的錯誤。
編譯后的字節(jié)碼文件格式主要分為兩部分:常量池和方法字節(jié)碼。常量池記錄的是代碼出現(xiàn)過的所有token(類名,成員變量名等等)以及符號引用(方法引用,成員變量引用等等);方法字節(jié)碼放的是類中各個方法的字節(jié)碼。下面是MainApp.class通過反匯編的結(jié)果,我們可以清楚看到.class文件的結(jié)構(gòu):
第二步(運行):java類運行的過程大概可分為兩個過程:1、類的加載 2、類的執(zhí)行。需要說明的是:JVM主要在程序第一次主動使用類的時候,才會去加載該類。也就是說,JVM并不是在一開始就把一個程序就所有的類都加載到內(nèi)存中,而是到不得不用的時候才把它加載進來,而且只加載一次。
下面是程序運行的詳細步驟:
在編譯好java程序得到MainApp.class文件后,在命令行上敲java AppMain。系統(tǒng)就會啟動一個jvm進程,jvm進程從classpath路徑中找到一個名為AppMain.class的二進制文件,將MainApp的類信息加載到運行時數(shù)據(jù)區(qū)的方法區(qū)內(nèi),這個過程叫做MainApp類的加載。
然后JVM找到AppMain的主函數(shù)入口,開始執(zhí)行main函數(shù)。
main函數(shù)的第一條命令是Animal animal = new Animal("Puppy");就是讓JVM創(chuàng)建一個Animal對象,但是這時候方法區(qū)中沒有Animal類的信息,所以JVM馬上加載Animal類,把Animal類的類型信息放到方法區(qū)中。
加載完Animal類之后,Java虛擬機做的第一件事情就是在堆區(qū)中為一個新的Animal實例分配內(nèi)存, 然后調(diào)用構(gòu)造函數(shù)初始化Animal實例,這個Animal實例持有著指向方法區(qū)的Animal類的類型信息(其中包含有方法表,java動態(tài)綁定的底層實現(xiàn))的引用。
當使用animal.printName()的時候,JVM根據(jù)animal引用找到Animal對象,然后根據(jù)Animal對象持有的引用定位到方法區(qū)中Animal類的類型信息的方法表,獲得printName()函數(shù)的字節(jié)碼的地址。
開始運行printName()函數(shù)。
特別說明:java類中所有public和protected的實例方法都采用動態(tài)綁定機制,所有私有方法、靜態(tài)方法、構(gòu)造器及初始化方法都是采用靜態(tài)綁定機制。而使用動態(tài)綁定機制的時候會用到方法表,靜態(tài)綁定時并不會用到。
jdk安裝好配置環(huán)境變量后,系統(tǒng)就承認了 java,javac等命令,當編譯好java文件,就可以在開始——運行——cmd的dos系統(tǒng)下運用指定命令運行java文件。
JDK 是整個Java的核心,包括了Java運行環(huán)境,Java工具和Java基礎(chǔ)的類庫。
JDK包含的基本組件包括:
javac – 編譯器,將源程序轉(zhuǎn)成字節(jié)碼
jar – 打包工具,將相關(guān)的類文件打包成一個文件
javadoc – 文檔生成器,從源碼注釋中提取文檔
jdb – debugger,查錯工具
java – 運行編譯后的java程序(.class后綴的)
appletviewer:小程序瀏覽器,一種執(zhí)行HTML文件上的Java小程序的Java瀏覽器。 Javah:產(chǎn)生可以調(diào)用Java過程的C過程,或建立能被Java程序調(diào)用的C過程的頭文件。 Javap:Java反匯編器,顯示編譯類文件中的可訪問功能和數(shù)據(jù),同時顯示字節(jié)代碼含義。 Jconsole: Java進行系統(tǒng)調(diào)試和監(jiān)控的工具
總之,jdk并不是一個應運軟件,并不能從哪里運行。編譯時在任何可輸入文本的軟件中均可(通常用.txt記事本編譯),編譯好后改名.java文件,在dos系統(tǒng)中用 javac命令編譯連接 java命令 .運行。
使用Eclipse編寫自己的第一個Java代碼。
編寫如下:
1、首先打開自己安裝的Eclipse軟件。
2、然后選擇File-New-JavaProject。
3、然后找到工程打開,右擊src選擇-New-Class。
4、填入類名,選擇下面的publicstaticvoidmain(String[]args)。
5、然后寫入代碼publicclassDemo{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubSystem.out.println(HelloWorld)。
6、點擊上面的運行按鈕,點擊確認,可以看到代碼運行結(jié)果。
.java文件的話,非項目那種單篇幅的源代碼需要先進行編譯,生成.class文件可以在命令控制臺下用java 文件名 進行運行,編譯java文件需要javac.exe程序 應該是jdk中的工具,所以你需要下載jdk并配置環(huán)境變量,然后在控制臺運行javac編譯源文件所在目錄下的java文件,會在本目錄下生成一個同名的.class文件
(沒有報錯的情況下) ,然后運行java 文件名 即可運行該代碼(前提是你這篇文件需要有main方法)。